20.10.2011, 14:19
Beitrag #1
|
Kiesch
LVF-Stammgast
Beiträge: 415
Registriert seit: Mar 2009
2019, 2018, 2016
2009
DE
04519
Deutschland
|
LVOOP - wann wird Kopie erstellt?
Ich hab zwar schon ein wenig Erfahrung mit LV aber noch nicht besonders viel mit LVOOP. Auch OOP glaube ich generell verstanden zu haben ^^
Was mich allerdings beschäftigt (weil ich beim lesen von Threads zu LVOOP drauf gestoßen bin):
Wann genau erstellt Labview Kopien von Objekten? Es gibt ja eine by Value Syntax, was ja an sich grundsätzlich kein Nachteil ist (man kann sehr schnell aus einem Objekt zwei verschiedene machen wenn man es braucht), allerdings stellt sich für mich dann die Frage, wann genau wirklich Kopien erzeugt werden.
Bei Verzweigungen muss das ja notwendigerweise passieren, allerdings habe ich aus den anderen Threads (schon etwas ältere) zwischen den Zeilen herausgelesen, dass auch bei der Übergabe an ein SubVI eine Kopie erzeugt wird. Ist das (immer noch?) richtig?
Ich dachte bisher immer Labview geht sparsam mit Kopien um und macht die nur wenn "notwendig" (also bei Verzeigungen).
Gruß Kiesch
P.S: Konkret stellt sich die Frage, da natürlich Objekte mit Objekten als Attributen schnell sehr "groß" werden können und ich nicht mein ganzes aktuell funktionierendes Programm nach OO umstelle, nur um dann festzustellen, dass das so nicht vernünftig funktioniert....
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*
|
|
|
20.10.2011, 15:23
Beitrag #2
|
BNT
LVF-Freak
Beiträge: 744
Registriert seit: Aug 2008
5.0 - 22Q3
1999
EN
64291
Deutschland
|
RE: LVOOP - wann wird Kopie erstellt?
Hi Kiesch
im Prinzip liegst Du richtig. In dem folgenden Link wird etwas über das Memory Management von LVOOP Objekten geschrieben: The Decisions behind the Design. Und hier etwas zum Compiler: LabVIEW Compiler under the Hood.
Ich denke der Compiler ist im Laufe der Zeit ziemlich schlau geworden. Ich benutze LVOOP Objekte wie Typedefinitionen und habe dabei bisher keine Speicher- oder Laufzeitprobleme entdecken können.
Gruß Holger
|
|
|
20.10.2011, 17:06
(Dieser Beitrag wurde zuletzt bearbeitet: 20.10.2011 17:06 von abrissbirne.)
Beitrag #3
|
|
|
21.10.2011, 08:05
Beitrag #4
|
|
|
21.10.2011, 09:40
Beitrag #5
|
Kiesch
LVF-Stammgast
Beiträge: 415
Registriert seit: Mar 2009
2019, 2018, 2016
2009
DE
04519
Deutschland
|
RE: LVOOP - wann wird Kopie erstellt?
Okay, heist: Auch Lesezugriffe erzwingen keine Objektkopien?
Noch eine Frage:
"Bauartbedingt" kann man ja in Labview kein klassisches build durchführen. Das heist also Datenkonsistenz (bei der Erstellung) erzwingt man nur durch die Option Standardwert (für Objekteigenschaften) setzen? Und natürlich in den Zugriffsprozeduren...
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*
|
|
|
21.10.2011, 10:23
Beitrag #6
|
BNT
LVF-Freak
Beiträge: 744
Registriert seit: Aug 2008
5.0 - 22Q3
1999
EN
64291
Deutschland
|
RE: LVOOP - wann wird Kopie erstellt?
(21.10.2011 09:40 )Kiesch schrieb: Okay, heist: Auch Lesezugriffe erzwingen keine Objektkopien?
Genau, es wird nur der Speicher für die gelesenen Attribute angelegt.
(21.10.2011 09:40 )Kiesch schrieb: Noch eine Frage:
"Bauartbedingt" kann man ja in Labview kein klassisches build durchführen. Das heist also Datenkonsistenz (bei der Erstellung) erzwingt man nur durch die Option Standardwert (für Objekteigenschaften) setzen? Und natürlich in den Zugriffsprozeduren...
Selbstverständlich kann man aus LabVIEW-VIs Executables erzeugen. Dafür benötigt man den Application-Builder, der in der Professional-Version enthalten ist.
Datenkonsitenz? Wenn ein LabVIEW-VI direkt gestartet wird, kopiert es die Werte der Kontrollen auf die Datenquellen im Blockdiagramm. Wenn es als SubVI aufgerufen wird, werden die Daten Eingangsdaten des aufrufenden VIs als Datenquelle im Blockdiagramm benutzt.
Die Attribute von LVOOP-Objekten sind privat. Daher werden beim direkten Start eines VI die Werte des Frontpanel-Elements benutzt, das in diesem Fall die Default-Werte enthält.
Gruß Holger
|
|
|
21.10.2011, 12:00
Beitrag #7
|
Kiesch
LVF-Stammgast
Beiträge: 415
Registriert seit: Mar 2009
2019, 2018, 2016
2009
DE
04519
Deutschland
|
RE: LVOOP - wann wird Kopie erstellt?
Sorry, Missverständnis, mir ging es um den "klassischen" Konstruktor, der ja (auch) dazu dient Datenkonsistenz (im Sinne von zusätzlichen Einschränkungen des Wertebereichs) innerhalb des Objekts sicherzustellen. *Zum Beispiel festzulegen, dass nur die Zahlen von -10 bis 10 gültige Attributwerte sind (oder ähnliches, komplexeres).
Hat sich von LV 2010 zu LV 2011 maßgeblich was an den Möglichkeiten bei LVOOP getan? Überlege nämlich gerade auch ob ich vielleicht updaten sollte.
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*
|
|
|
| |