22.02.2010, 16:18
|
SeBa
LVF-Guru
Beiträge: 2.025
Registriert seit: Oct 2008
09SP1 & 10 FDS
2008
DE
65xxx
Deutschland
|
Muss man Referenzen schließen?
' schrieb:...
Auch für eine "VI-Referenz" wie von SeBa angegeben gilt im Prinzip das selbe. Nur ist es hier noch schlimmer: Würde man die Referenz löschen - sollte eigentlich das Objekt gelöscht werden: Das VI wäre dann also verschwunden.
...
Und weil LV clever ist ignoriert es meine Auffordeung zum Löschen der Referenz bis das VI beendet wird und die Referenz sowieso geschlossen werden würde.
Das Schließen solcher Referenzen tut also keinem weh, schadet aber auch nicht.
Speicher wird für solche Referenzen nur einmal alloziert, in Schleifen wird immer auf diese eine Referenz verwiesen (zusätzlicher Speicher wird also nicht alloziert).
Ich glaub ich habs kapiert.
Gruß SeBa
Dieser Beitrag soll weder nützlich, informativ noch lesbar sein.
Er erhebt lediglich den Anspruch dort wo er ungenau ist, wenigstens eindeutig ungenau zu sein.
In Fällen größerer Abweichungen ist es immer der Leser, der sich geirrt hat.
Rette einen Baum!
Diesen Beitrag nur ausdrucken, wenn unbedingt nötig!
|
|
|
22.02.2010, 17:33
(Dieser Beitrag wurde zuletzt bearbeitet: 22.02.2010 17:34 von IchSelbst.)
|
IchSelbst
LVF-Guru
Beiträge: 3.696
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Muss man Referenzen schließen?
' schrieb:Das Schließen solcher Referenzen tut also keinem weh, schadet aber auch nicht.
Das ist Standpunktssache. Kannst du mal kucken, was der Errorausgang des Close sagt, wenn du eine VI-Referenz schließt? Dumm wäre, wenn einer den Errorcluster sequenziert hat ...
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
22.02.2010, 17:42
|
Y-P
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
Beiträge: 12.612
Registriert seit: Feb 2006
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
|
Muss man Referenzen schließen?
Hab's getestet. Das macht gar nichts aus.
Gruß Markus
' schrieb:Kannst du mal kucken, was der Errorausgang des Close sagt, wenn du eine VI-Referenz schließt?
--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
|
|
|
26.02.2010, 11:44
|
Kiesch
LVF-Stammgast
Beiträge: 412
Registriert seit: Mar 2009
2019, 2018, 2016
2009
DE
04519
Deutschland
|
Muss man Referenzen schließen?
Daher aber mal kurz gesagt: Das Schlimmste was mir passieren kann ist, dass mir der Speicher ausgeht und das VI sich deshalb aufhängt (?).
Zitat:Märchen und Geschichten werden erzählt am Lagerfeuer, technischen Fakten werden mitgeteilt (oder so). (Genauso wie Software nicht auf einem Server "herumliegt", die ist dort installiert.)
*Zitat: IchSelbst*
|
|
|
26.02.2010, 12:10
|
IchSelbst
LVF-Guru
Beiträge: 3.696
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Muss man Referenzen schließen?
' schrieb:Das Schlimmste was mir passieren kann ist, dass mir der Speicher ausgeht und das VI sich deshalb aufhängt (?).
Ob das als das Schlimmste bezeichnet werden kann, ist fraglich. Wäre dem so, wäre das eher gut.
Auftreten werden zuerst einmal andere Effekte: Die Laufzeiten diverser paralleler Loops werden sich vergrößern - ohne dass das jemand merkt. D.h. die Prozessorzeit steigt (Das Betriebssystem muss ggf. eine Handle-Liste durchgehen, was bei 1Mio Handle doch etwas dauert). Das hat auch zur Folge, dass diverse Puffer (Queues, Melder) überlaufen können und Daten verloren gehen - und auch das keiner merkt. Dann können einzelne parallele VIs abstürzen - andere werden aber weiterlaufen.
Alles Probleme, die ich als schlimmer erachte als den Absturz der ganzen Applikation.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
26.02.2010, 12:28
|
Kiesch
LVF-Stammgast
Beiträge: 412
Registriert seit: Mar 2009
2019, 2018, 2016
2009
DE
04519
Deutschland
|
Muss man Referenzen schließen?
Ich würde das auch als schlimmer erachten - deswegen ja die Frage. Wenn ich mir nur Speicher blockiere sehe ich halt nur das Problem Komplettabsturz oder langsam werden (langsame Ausführung ist ja prinzipiell verkraft und bemerkbar - aber gut zu wissen woran das auch liegen kann).
Die Auswirkungen sollten aber zumindest auf das VI beschränkt bleiben?
Zitat:Märchen und Geschichten werden erzählt am Lagerfeuer, technischen Fakten werden mitgeteilt (oder so). (Genauso wie Software nicht auf einem Server "herumliegt", die ist dort installiert.)
*Zitat: IchSelbst*
|
|
|
26.02.2010, 13:05
|
IchSelbst
LVF-Guru
Beiträge: 3.696
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Muss man Referenzen schließen?
' schrieb:Die Auswirkungen sollten aber zumindest auf das VI beschränkt bleiben?
Nein, normalerweise nicht.
Ein VI kann prinzipiell wie ein eigenständiger Prozess betrachtet werden. So gesehen würde eine Beschränkung auf nur das eine VI naheliegen. VIs sind aber untereinander gekoppelt - und zwar mindestens über den Speichermanager (der sich in der LV-Runtime befindet). Blockiert nun ein VI den Speichermanager, so beeinflusst das automatisch alle anderen VIs. Die können nämlich nicht mehr auf den Speichermanager zugreifen, wenn der gerade blockiert ist. Ähnliche Verhaltensweisen treten auch bei anderen, VI-übergreifenden Strukturen auf (z.B. Synchronisationsmethoden).
Es kann natürlich Fälle geben, in denen die Auwirkungen auf nur ein VI beschränkt bleiben. Nichtsdestoweniger muss man aber wissen, dass es auch anders sein könnte.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
02.02.2012, 07:03
|
|
|
02.02.2012, 09:27
(Dieser Beitrag wurde zuletzt bearbeitet: 02.02.2012 09:29 von Falk.)
|
Falk
ja, das bin ich...
Beiträge: 343
Registriert seit: Jan 2006
8.0 :: 201x ::202x
2006
DE_EN
Deutschland
|
RE: Muss man Referenzen schließen?
(02.02.2012 07:03 )GT123 schrieb: Beispiel1:
Wenn ich innerhalb einer Schleife die Referenz benutze kann ich das doch ohnen SR tun?
Es bleibt immer die gleiche Referenz, schliessen nur nach beenden der Schleife?
Soweit richtig, aber man sollte gerade bei einer For-Schleife immer folgenden Fall berücksichtigen. Was ist wenn die Schleife genau 0x ausgeführt wird (beispielsweise durch einen leeren Array als Indizierung). Der Fall kommt ja durchaus auch mal vor. In diesem Fall würdest du ohne Shift-Register am Ende eine ungültige Referenz schließen wollen, während deine Eingangsreferenz am Ende munter weiter existiert
Sollte man also die Anzahl der Schleifendurchläufe vorher nicht explizit kennen (Verdrahtung durch Konstante etc.) und sollte n=0 möglich sein, wäre bei der For-Loop die Handhabung einer Referenz immer über ein Shift-Register vorzuziehen. Das gilt eigentlich generell mit Daten, die man über die For-Schleife laufen lassen muss.
Noch eine weitere Anmerkung zu deinem Beispiel. Bevor du dir Gedanken über die statische Control-Referenzen deines VIs machst, solltest du vorher die VI-Referenzen im Auge behalten. Du öffnest beispielsweise die VI-Referenz zu deinem test.vi um anschließend an die Control-Referenzen heranzukommen. Soweit so gut, aber an keiner Stelle deines Codes schließt du diese Referenz. Sprich das VI bleibt nach Beendigung munter weiter im Speicher erhalten.
Schöne Grüße
Falk
|
|
|
| |