22.02.2010, 12:53
(Dieser Beitrag wurde zuletzt bearbeitet: 22.02.2010 13:49 von Y-P.)
Beitrag #1
|
IchSelbst
LVF-Guru
Beiträge: 3.700
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Muss man Referenzen schließen?
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.
' schrieb:Nicht vergessen geöffnete Referenzen wieder zu schließen
Referenzen schließen?
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
22.02.2010, 13:00
Beitrag #2
|
|
|
22.02.2010, 13:01
Beitrag #3
|
|
|
22.02.2010, 13:09
Beitrag #4
|
SeBa
LVF-Guru
Beiträge: 2.025
Registriert seit: Oct 2008
09SP1 & 10 FDS
2008
DE
65xxx
Deutschland
|
Muss man Referenzen schließen?
' 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...
Welches Risiko besteht denn, wenn du den Kühlschrank oder die Haustür offen lässt?
Gruß SeBa
PS:
Hat eigentlich nur indirekt mit der original Fragestellung zu tun...
... mag das mal einer in zwei Topics aufteilen?
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, 13:14
Beitrag #5
|
|
|
22.02.2010, 13:19
Beitrag #6
|
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?
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
--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
|
|
|
22.02.2010, 13:25
Beitrag #7
|
|
|
22.02.2010, 14:23
(Dieser Beitrag wurde zuletzt bearbeitet: 22.02.2010 14:24 von IchSelbst.)
Beitrag #8
|
IchSelbst
LVF-Guru
Beiträge: 3.700
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Muss man Referenzen schließen?
' 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).
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.)
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
22.02.2010, 14:43
(Dieser Beitrag wurde zuletzt bearbeitet: 22.02.2010 14:46 von dimitri84.)
Beitrag #9
|
|
|
22.02.2010, 15:10
(Dieser Beitrag wurde zuletzt bearbeitet: 22.02.2010 15:12 von IchSelbst.)
|
|
|
| |