LabVIEWForum.de
Verständnisfrage Referenzen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Verständnisfrage Referenzen (/Thread-Verstaendnisfrage-Referenzen)



Verständnisfrage Referenzen - Hasenfuss - 09.04.2013 23:40

Aus "optischen" Gründen bin ich dazu übergegangen, nicht mehr alle Melder und Queues durch das Programm zu verbinden, da ich sonst Unmengen an Linien hab.

Meine Frage - wenn ich jetzt jedesmal innerhalb einer while-Schleife einen Melder so wie auf dem Bild aufrufe mit "Melder anfordern..." - wird dann bei jedem Aufruf eine Referenz erstellt und im Laufe der Zeit der Speicher mit Referenzen "zugemüllt"?


RE: Verständnisfrage Referenzen - Lucki - 10.04.2013 07:35

Natürlich nicht, denn wenn es unterschiedliche Referenzen wären, dann gäbe es doch keinen Datenaustausch zwischen Sendern und Empfängern. Die Idee der "optischen Vereinfachung" läßt sich übrigens noch weiter treiben. Ich schließe als Referenz überall nur ein winzig kleines Dings an, also so:
[attachment=44288]
Hinter diesen kleinen Ding steckt ein SubVI (FGV). Es dient, wie man sieht, zum Lesen der Referenz. Beim ersten Aufruf wird die Referenz außerdem erzeugt:
[attachment=44289]


RE: Verständnisfrage Referenzen - jg - 10.04.2013 08:52

Ich muss Lucki widersprechen.

So wie du (Hasenfuss) es gemacht hast, wird dir der Speicher zugemüllt! Intern wird zwar am Ende auf dieselbe Queue bzw. Notifier verwiesen, trotzdem

Die ideale Lösung zeigt dagegen Lucki, die müllt dir den Speicher nicht zu.

Gruß, Jens


RE: Verständnisfrage Referenzen - Lucki - 10.04.2013 10:36

Ich habe ohne irgendwelches Hintergrundwissen nur rein logisch argumentiert. Komisch ist das aber doch, aber es ist ja kein Problem die sich widersprechenden Aussagen über das Experiment entscheiden zu lassen.

Wenn ich also 1E5 Queues erstelle, und zwar so:
[attachment=44290]
Dann sehe ich im "Windows Task Manager/Performance" das dafür mehr als 100 MByte Memory verwendet werden.

Darum geht es hier aber nicht. Es geht darum, dass man die Funktion "Melder anfordern" auf einen Melder anwendet, der bereits existiert und einen Namen hat, also so:
[attachment=44292]

Und hier sieht man ebenso deutlich, dass auch bei noch so vieler (auch millionenfacher) "Erzeugung" (- Die ja gar keine ist -) kein Memory verbraucht wird.

So unvorstellbar dumm kann Labview doch überhaut nicht sein: Dass es intern Millionen verschiedener Melder-Referenzen erzeugen kann, die sich aber alle auf ein und denselben Melder beziehen. Das ist aber, wenn ich Dich recht verstehe, der Kernpunkt Deiner Aussage.


RE: Verständnisfrage Referenzen - Hasenfuss - 10.04.2013 12:36

Herzlichen Dank für Eure Antworten.

Wie bin ich eigentlich auf diese Frage gekommen?

Schaut doch mal hier bei dem Link auf Antwort 3:

http://www.labviewforum.de/Thread-doppelte-while-Schleife-geschickt-beenden

Da heisst es:
(08.04.2013 20:24 )jg schrieb:  Du hast 2 "unabhängige" Referenzen auf denselben Melder erzeugt.

Grundregel: Pro Obtain braucht es üblicherweise ein Close/Destroy.
Ausnahme: Du erzwingst durch ein TRUE die Zerstörung aller Referenzen.

Gruß, Jens

Da steht, dass ich zwei unabhängige Referenzen auf einen Melder erzeugt habe - und wenn ich doch zwei unabhängige Referenzen erzeuge, dann brauchen die doch auch Speicherplatz - oder nicht? Sonst hätt ich dort doch nicht das Problem gehabt, dass ich TRUE zur Zerstörung aller Referenzen bei Melder freigeben angeben müsste.

Zitat:So wie du (Hasenfuss) es gemacht hast, wird dir der Speicher zugemüllt! Intern wird zwar am Ende auf dieselbe Queue bzw. Notifier verwiesen, trotzdem

Zitat:"Und hier sieht man ebenso deutlich, dass auch bei noch so vieler (auch millionenfacher) "Erzeugung" (- Die ja gar keine ist -) kein Memory verbraucht wird.

Ich bin jetzt leider noch nicht wirklich schlauer - bis auf die Tatsache, dass meine Methode ungeschickt ist und FGVs zum Speichern der Referenzadresse eine bessere Variante ist.


RE: Verständnisfrage Referenzen - jg - 10.04.2013 12:50

@Lucki:
Die Hilfe zu Obtain Notifier besagt etwas anderes.

Dein Bsp greift außerdem zu kurz. Du übersiehst, dass der LabVIEW-Compiler inzwischen sehr schlau geworden ist.
Da die Refnum-Out von Obtain Notifer bei deinem Bsp. überhaupt nicht weiter verwendet wird, wird wahrscheinlich die komplette For-Schleife wegoptimiert.

Gegenbsp:
[attachment=44294]
Alle Refnums sind anders!

@Hasenfuss:
Das ist kein einfaches Thema: Natürlich wird innerhalb einer Programm-Instanz auf denselben Notifier verwiesen, wenn sie den gleichen Namen haben. Trotzdem kann es sein, dass verschiedene "Obtain Notifer" eine andere Refnum erzeugt (vgl. Hilfe, s. oben). Und deshalb wird auch dringend empfohlen, für jedes Instanz von "Obtain" ein Close/Destroy zu verwenden.

Gruß, Jens


RE: Verständnisfrage Referenzen - macmarvin - 10.04.2013 12:53

(10.04.2013 10:36 )Lucki schrieb:  So unvorstellbar dumm kann Labview doch überhaut nicht sein: Dass es intern Millionen verschiedener Melder-Referenzen erzeugen kann, die sich aber alle auf ein und denselben Melder beziehen.

Doch genau das tut LabVIEW! Jedes Obtain eine Referenz. Also viele Referenzen auf einen gemeinsamen Melder, der erst "verschwindet", wenn die alle Referenzen darauf verweisenden Referenzen geschlossen sind.
So ist's dokumentiert und lässt sich einfach testen.


RE: Verständnisfrage Referenzen - Lucki - 10.04.2013 13:26

Gut, ihr habt Recht. Da ich bei Melden/Queues aber immer mit überschaubar vielen Quellen und Senken zu tun haben werde, und nicht mit Millionen, ordne ich den Sachverhalt ein in die Kategorie "unnützes Wissen" - soweit es das Programmieren betrifft. Wenn es allerdings darum geht mal zu zeigen, wer der oberste Guru ist: Dafür ist das Wissen Spitze. (Könnt ihr jetzt meinem hintergründigem Humor noch folgen oder muss ich ein passendes Emotikon suchen?)


RE: Verständnisfrage Referenzen - Holy - 14.04.2013 21:25

(10.04.2013 13:26 )Lucki schrieb:  Gut, ihr habt Recht. Da ich bei Melden/Queues aber immer mit überschaubar vielen Quellen und Senken zu tun haben werde, und nicht mit Millionen, ordne ich den Sachverhalt ein in die Kategorie "unnützes Wissen" - soweit es das Programmieren betrifft. Wenn es allerdings darum geht mal zu zeigen, wer der oberste Guru ist: Dafür ist das Wissen Spitze. (Könnt ihr jetzt meinem hintergründigem Humor noch folgen oder muss ich ein passendes Emotikon suchen?)

Ich denke ich verstehe den Humor anders wie du Ihn wohl meinst Angel_not Sonst ist der Punkt schon sehr wichtig weil gerade die Nichtbeachtung von "Jeder Obtain ein Close", gerade für Neulinge, langfristig zu Problemen führt.