INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Muss man Referenzen schließen?



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

22.02.2010, 15:19
Beitrag #11

dimitri84 Offline
Astronaut
*****


Beiträge: 1.496
Registriert seit: Aug 2009

2020 Developer Suite
2009
DE_EN

53562
Deutschland
Muss man Referenzen schließen?
Einwand zur Kenntnis genommen und akzeptiert.

„Sag nicht alles, was du weißt, aber wisse immer, was du sagst.“ (Matthias Claudius)
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
22.02.2010, 16:18
Beitrag #12

SeBa Offline
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.Big Grin

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!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
22.02.2010, 17:33 (Dieser Beitrag wurde zuletzt bearbeitet: 22.02.2010 17:34 von IchSelbst.)
Beitrag #13

IchSelbst Offline
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).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
22.02.2010, 17:42
Beitrag #14

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

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. Unsure

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 !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.02.2010, 11:44
Beitrag #15

Kiesch Offline
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*
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.02.2010, 12:10
Beitrag #16

IchSelbst Offline
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).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
26.02.2010, 12:28
Beitrag #17

Kiesch Offline
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*
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.02.2010, 13:05
Beitrag #18

IchSelbst Offline
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).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.02.2012, 07:03
Beitrag #19

GT123 Offline
LVF-Stammgast
***


Beiträge: 432
Registriert seit: Mar 2009

2018
2008
DE_EN


Schweiz
RE: Muss man Referenzen schließen?
Hallo allerseits,

ich habe mich hier zu dem Thema eingelesen, bin mir aber nicht bei allem ganz sicher.
Ausserdem tritt bei meiner Applikation ein Fehler auf beim Beenden eines Vis welches in einem Subpanel
geladen wurden (Dialog -> Resetting VI: xy.vi dann hängt sich alles auf u. man muss LV abschiessen).
Da dieser Fehler nur bei längerer Laufzeit auftritt, kann ich mir gut vorstellen das ich mir evtl. den Speicher mit
Referenzen "zu müll".

Ich habe mal ein Bsp. Vi angehängt mir zwei Schleifen und würde mich freuen wenn ihr mir hierzu wenn
nötig Verbesserungsvorschläge gebt, nur was das mit den Referenzen angeht, die Funktion des Vis ist
ja nicht gegeben.

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?

Beispiel2:
Wenn ich eine Ref. einer Eigenschaftfunktion schliesse (XScale.ScaleFit) ist dann die Ref nur für diese
Funktion gelöscht oder die ganze Ref. des XY Graph?

Denn ich verstehe das so: eine Ref. ist ein Zeiger, beim schliessen wird die Speicherzuweisung gelöscht.

Ich hoffe ihr könnt mir hier weiterhelfen.


Angehängte Datei(en) Thumbnail(s)
   

10.0 .vi  LV_Close_Ref.vi (Größe: 15,56 KB / Downloads: 177)

Grüsse
GT123
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.02.2012, 09:27 (Dieser Beitrag wurde zuletzt bearbeitet: 02.02.2012 09:29 von Falk.)
Beitrag #20

Falk Offline
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

Currently: zzzZZZZZZZZ
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Extrem langsamer Variablen Zugriff über Referenzen hajos118 12 5.607 01.08.2022 17:20
Letzter Beitrag: BNT
  Muss man Referenzen von controls überhaupt schließen? dimitri84 4 4.236 21.04.2022 11:57
Letzter Beitrag: dimitri84
  Referenzen in mehreren Bibliotheken aktualisieren seuk 3 4.009 12.09.2019 09:10
Letzter Beitrag: IchSelbst
  Cluster mit Referenzen auf FP-Elemente Oli_N 8 9.083 15.02.2017 11:19
Letzter Beitrag: Oli_N
  Frage zu Referenzen maxxillian 1 4.083 21.10.2016 08:04
Letzter Beitrag: GerdW
  Alternative zu Referenzen moTo 2 4.169 26.04.2016 18:16
Letzter Beitrag: moTo

Gehe zu: