LabVIEWForum.de
Frage zu Melder/Queues freigeben - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Frage zu Melder/Queues freigeben (/Thread-Frage-zu-Melder-Queues-freigeben)



Frage zu Melder/Queues freigeben - Hasenfuss - 26.03.2013 14:08

Ich habe eine Frage bezüglich Freigabe von Meldern/Queues:

Wenn ich ein Programm beende, aber nicht die Funktion Melder/Queues freigeben beim Beenden mache - werden solche Queues/Melder im Speicher belassen oder mit dem Beenden des Programms auch gelöscht? Oder z.B. wenn ich das Programm (wenn es noch nicht als Exe-Datei compiliert wurde) und ich dann auf Unterbrechen/Abbrechen klicke?

Falls mir jemand diese Frage beantworte kann, würde ich mich drüber freuen.


RE: Frage zu Melder/Queues freigeben - eb - 26.03.2013 16:36

Hallo,

solange hier noch keiner von den absoluten Profis antwortet geb ich mal meine bescheidene Meinung ab:
Ich denke, dass die Referenzen auf die Queues/Melder sehr wohl im Speicher bleiben. Und zwar solange die Applikationsinstanz "lebt". Also entweder LabVIEW in der IDE oder eben die Exe als solches. (wenn das VI als Exe kompiliert wurde). Das ist ja genau der graus mit den Speicherlecks: Wenn man vergisst die Refs zu schließen und diese aber in einer Schleife immer neu erzeugt werden (aber nie benutzt) dann sammeln sich die Refs eben an und müllen den Speicher zu.

Hier ein kleines getestetes Bsp: ACHTUNG Speicherzumüllung inside!!
- wenn das VI startet wird sehr schnell der Speicher zugemüllt mit unbenutzten und sofort wieder vergessenen Refs auf unbenannte Queues
- Stoppt man die Q-Creation dann geht das Programm in den Wartemodus und man kann z.B. im Taskmanager sehen wie viel Speicher schon hinzugekommen ist.
- Stoppt man die WarteSchleife wird die Q wieder freigegeben, aber eben nur die EINE LETZTE und nicht die Tausenden davor. Deswegen bleibt der Datenmüll (unbenutzte Refs) im Speicher
- Stoppt man das VI (in der IDE) passiert nichts weiter, der Datenmüll bleibt
- NUR wenn man LabVIEW komplett schließt (wenn das VI ausgeführt wurde) oder die Exe schließt (wenn VI als Exe kompiliert wurde), wird der Speicher wieder freigegeben.
[attachment=44115]

Gruß


RE: Frage zu Melder/Queues freigeben - BNT - 26.03.2013 17:06

Gut erläutert.

Gruß Holger


RE: Frage zu Melder/Queues freigeben - Lucki - 26.03.2013 20:02

Die Frage war ja, was beim Beenden das Programms passiert. Mein Erfahrungen sind die: Das kommt darauf an, ob man sich in der Entwicklungsumgebung befindet oder ein Exe hat.
Entwicklungsumgebnung: Der Speicher wird nicht mit dem Beenden des Programms freigegeben, sondern erst mit Beenden von Labview. EXE: Speicher wird beim Beenden freigegeben.

Entwicklungsumgebung genauer:

Szenarium 1: Wenn man Programm 1 schließt, ohne die Queues zu löschen, und startet ein ganz anderes Programm 2, dann hat Programm 1 weniger Memory zur Verfügung.

Szenarium 2: Wenn man Programm 1 schließt, und startet es wiederholt, dann kommt es darauf an, ob die Queue einen Namen hat oder nicht.
Hat sie einen Namen, dann wird beim Neustart keine neue Queue geöffnet, die alte wird weiter benutzt. Zusätzliches Memory wird nicht verbraucht.

Hat sie keinen Namen, dann wird bei jedem Start eine neue Queue erstellt, es wird immer mehr Memory gebraucht.

Man kann das alles selbst testen, indem man den Windowas Task Manager /Performance aufruft.


RE: Frage zu Melder/Queues freigeben - Hasenfuss - 27.03.2013 10:15

Vielen Dank für Eure Antworten.