09.04.2013, 23:40
Beitrag #1
|
|
|
10.04.2013, 07:35
(Dieser Beitrag wurde zuletzt bearbeitet: 10.04.2013 07:43 von Lucki.)
Beitrag #2
|
|
|
10.04.2013, 08:52
Beitrag #3
|
jg
CLA & CLED
Beiträge: 15.864
Registriert seit: Jun 2005
20xx / 8.x
1999
EN
Franken...
Deutschland
|
RE: Verständnisfrage Referenzen
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
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Einführende Links zu LabVIEW, s. GerdWs Signatur.
|
|
|
10.04.2013, 10:36
(Dieser Beitrag wurde zuletzt bearbeitet: 10.04.2013 10:43 von Lucki.)
Beitrag #4
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
RE: Verständnisfrage Referenzen
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:
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:
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.
|
|
|
10.04.2013, 12:36
(Dieser Beitrag wurde zuletzt bearbeitet: 10.04.2013 12:38 von Hasenfuss.)
Beitrag #5
|
Hasenfuss
LVF-Stammgast
Beiträge: 331
Registriert seit: Dec 2012
2012
2012
DE
|
RE: Verständnisfrage Referenzen
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-doppel...kt-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.
|
|
|
10.04.2013, 12:50
Beitrag #6
|
jg
CLA & CLED
Beiträge: 15.864
Registriert seit: Jun 2005
20xx / 8.x
1999
EN
Franken...
Deutschland
|
RE: Verständnisfrage Referenzen
@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:
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
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Einführende Links zu LabVIEW, s. GerdWs Signatur.
|
|
|
10.04.2013, 12:53
Beitrag #7
|
|
|
10.04.2013, 13:26
Beitrag #8
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
RE: Verständnisfrage Referenzen
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?)
|
|
|
14.04.2013, 21:25
Beitrag #9
|
|
|
| |