LabVIEWForum.de
Muss man Referenzen schließen? - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Muss man Referenzen schließen? (/Thread-Muss-man-Referenzen-schliessen)

Seiten: 1 2 3


Muss man Referenzen schließen? - IchSelbst - 22.02.2010 12:53

EDIT von Y-P:
Dieses Thema wurde von einem anderen Thema abgespaltet, da es als Grundlage für eine Diskussion gelten soll, ob und wann man Referenzen schließen soll, darf, muss. Big Grin

' schrieb:Nicht vergessen geöffnete Referenzen wieder zu schließen
Referenzen schließen? Unsure


Muss man Referenzen schließen? - SeBa - 22.02.2010 13:00

' schrieb:Referenzen schließen?Unsure

[attachment=24576]

Muss man nicht?
Hab mir angewöhnt, alles was ich auf mache auch wieder zu schließen...

Gruß SeBa


Muss man Referenzen schließen? - dimitri84 - 22.02.2010 13:01

' schrieb:Nicht vergessen geöffnete Referenzen wieder zu schließen... ich habs weggelassen.
Mir ist bei dem Satz in den Sinn gekommen, dass ich Control-Referenzen nie schließe. Welches (theoretische) Risiko besteht denn bzw. welchen Schaden richtet man an, wenn man das Schließen vergisst?


Muss man Referenzen schließen? - SeBa - 22.02.2010 13:09

' schrieb:Mir ist bei dem Satz in den Sinn gekommen, dass ich Control-Referenzen nie schließe. Welches (theoretische) Risiko besteht denn bzw. welchen Schaden richtet man an, wenn man das Schließen vergisst?

Ehrlich gesagt...KA

Welches Risiko besteht denn, wenn du den Kühlschrank oder die Haustür offen lässt?Unsure

Gruß SeBa

PS:
Hat eigentlich nur indirekt mit der original Fragestellung zu tun...
... mag das mal einer in zwei Topics aufteilen?


Muss man Referenzen schließen? - dimitri84 - 22.02.2010 13:14

' schrieb:Welches Risiko besteht denn, wenn du den Kühlschrank oder die Haustür offen lässt?Unsure
1) Meinen Kühlschrank oder Haustür öffne ich nicht via Referenz.
2) Die dabei entstehenden Risiken sind mir (und auch dir) sehr wohl bekannt.


Ich glaube die kleine Meldung von IchSelbst war nur eine Ankündigung dazu was Näheres zu erzählen. (?)


Muss man Referenzen schließen? - Y-P - 22.02.2010 13:19

Das machst Du auch gut so. Referenzen gehören geschlossen (auch wenn man es manchmal nicht unbedingt muss).
Hier wird darüber diskutiert: http://forums.ni.com/ni/board/message?boar...ssage.id=159571
Ich schließe auch alle, dann bin ich auf der sicheren Seite.

Gruß Markus

' schrieb:[attachment=52996:close_ref.png]

Muss man nicht?
Hab mir angewöhnt, alles was ich auf mache auch wieder zu schließen...

Gruß SeBa



Muss man Referenzen schließen? - SeBa - 22.02.2010 13:25

' schrieb:...
Hier wird darüber diskutiert: http://forums.ni.com/ni/board/message?boar...ssage.id=159571...


Da hab ich auch grad drin gestöbertBig Grin

Hier noch ein LabVIEWWiki.org Artikel zu ControlReferences

Gruß SeBa


Muss man Referenzen schließen? - IchSelbst - 22.02.2010 14:23

' schrieb:Ich glaube die kleine Meldung von IchSelbst war nur eine Ankündigung dazu was Näheres zu erzählen. (?)
Echt cool, dimitri84. Aus dir wird mal ein guter Diplomat. (Das kursive hab ich mal ignoriert). Wink

Eine explizite Referenz auf ein Frontpanelelement kann man eigentlich gar nicht löschen. Sie stellt (eigentlich) nur eine Möglichkeit dar, aus einem instanzfreien Property ein instanzbezogenes Property zu machen. Woher soll ein Property sonst wissen, welches Objekt (Instanz auf dem Frontpanel) es bearbeiten soll. Eine solche Referenz steht prinzipiell bereits zur Entwicklungszeit fest. Zur Laufzeit des Programmes muss hier (eigentlich) gar nichts gemacht werden. Würde man diese Referenz löschen, wäre beim nächsten Aufruf die Referenz nicht mehr vorhanden - und damit auch der Verweis, welche Instanz bearbeitet werden soll. Eine solche Referenz würde am Ende des Programmes automatisch gelöscht werden.

Für eine implizite Referenz, das sind die, die man per Panel->Elemente bekommt, gilt prinzipiell das selbe. LV hat hier nur das Problem mit dem Array: Ein Array kann nur typidentische Elemente enthalten. Daher sind alle Elemente von Typ TObject (oder auch: TypFrontpanelelement). Und die muss man dann per "To more specific class" selbst manuell genauer spezifizieren. Das ist leider so.

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.


Gelöscht wird ja nicht eine Referenz. Referenz ist ein abstrakter Begriff. Gelöscht, bzw. freigegeben, wird immer Speicherbereich (und ggf. ein Treiber), der hinter der Referenz steht. Der Bereich hinter der Referenz eines Frontpanelelementes wäre aber das Frontpanelelement selbst. Löschen ist immer dann, und nur dann, notwendig, wenn zur Laufzeit etwas created wird. Beim Createn wird ein Speicherbereich geschaffen, der zwangsweise auch wieder gelöscht werden muss. Öffnet man eine VI-Referenz per VI-Server, so wird ein "Handle-Block" generiert und der ist es, der per Close geschlossen werden muss.

(Und ob es nun Referenz, Handle oder Instanz heißt, sollte auf der Anwenderebene von LabVIEW keine Rolle spielen.)


Muss man Referenzen schließen? - dimitri84 - 22.02.2010 14:43

' schrieb:Öffnet man eine VI-Referenz per VI-Server, so wird ein "Handle-Block" generiert und der ist es, der per Close geschlossen werden muss.
Genau, das waren bisher immer die einzigen Referenzen die ich wieder geschlossen habe.

Zitat:(Das kursive hab ich mal ignoriert).
Was ist an dem Wort erzählen verkehrt?Huh


Muss man Referenzen schließen? - IchSelbst - 22.02.2010 15:10

' schrieb:Was ist an dem Wort erzählen verkehrt?Huh
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.)