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 

Verständnisfrage Referenzen



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!

09.04.2013, 23:40
Beitrag #1

Hasenfuss Offline
LVF-Stammgast
***


Beiträge: 331
Registriert seit: Dec 2012

2012
2012
DE



Verständnisfrage Referenzen
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"?


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
10.04.2013, 07:35 (Dieser Beitrag wurde zuletzt bearbeitet: 10.04.2013 07:43 von Lucki.)
Beitrag #2

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
RE: Verständnisfrage Referenzen
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:
   
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:
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.04.2013, 08:52
Beitrag #3

jg Offline
CLA & CLED
LVF-Team

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.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.04.2013, 10:36 (Dieser Beitrag wurde zuletzt bearbeitet: 10.04.2013 10:43 von Lucki.)
Beitrag #4

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

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.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.04.2013, 12:36 (Dieser Beitrag wurde zuletzt bearbeitet: 10.04.2013 12:38 von Hasenfuss.)
Beitrag #5

Hasenfuss Offline
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.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.04.2013, 12:50
Beitrag #6

jg Offline
CLA & CLED
LVF-Team

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.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
10.04.2013, 12:53
Beitrag #7

macmarvin Offline
CLA
***


Beiträge: 445
Registriert seit: Sep 2006

2014
2004
EN

81373
Deutschland
RE: Verständnisfrage Referenzen
(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.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.04.2013, 13:26
Beitrag #8

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

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?)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.04.2013, 21:25
Beitrag #9

Holy Offline
LVF-Stammgast
***


Beiträge: 339
Registriert seit: Sep 2008

2014
2007
EN

09XXX
Deutschland
RE: Verständnisfrage Referenzen
(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.
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.603 01.08.2022 17:20
Letzter Beitrag: BNT
  Muss man Referenzen von controls überhaupt schließen? dimitri84 4 4.235 21.04.2022 11:57
Letzter Beitrag: dimitri84
  Referenzen in mehreren Bibliotheken aktualisieren seuk 3 4.007 12.09.2019 09:10
Letzter Beitrag: IchSelbst
  Verständnisfrage (Bug?) THL 6 3.907 15.08.2018 12:47
Letzter Beitrag: GerdW
  Cluster mit Referenzen auf FP-Elemente Oli_N 8 9.068 15.02.2017 11:19
Letzter Beitrag: Oli_N
  Frage zu Referenzen maxxillian 1 4.080 21.10.2016 08:04
Letzter Beitrag: GerdW

Gehe zu: