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!
gibt es bei LV eine Möglichkeit die Größe eines Cluster-Elements zu bestimmen? Also so wie man
es bei C mit Sizeof() machen würde.
Hintergrund: Bei meinen Programmen packe ich alle Variablen in einen riesigen Cluster. Der enthält
zunächst weitere Cluster (nach Themen sortiert). Darin sind dann die entsprechenden Elemente
enthalten. Da auch Arrays dabei sind, ändert sich die Größe des Clusters.
Den Cluster "schleppe" ich dann durch alle VI's durch. Ab einer gewissen Größe wirkt sich das auf
die Performance aus. Um dies zu optimieren, wäre es gut, wenn man die Größe bestimmen könnte.
Ja gut, aber wie kommt man mit Referenzen weiter? Man kann den Wert und ein paar Eigenschaften
über die Referenz ändern. Aber wie bestimme ich die Größe bzw. den Typ eines einzelnen Elements?
Wenn du die Anzahl der Elemente eines im Cluster enthaltenen Arrays haben willst, musst du dir über die Controlreferenz den Value holen und dann ArraySize ermitteln...
Du musst die einzelnen enthaltenen Controls aber noch mit "To more specific class" genauer beschreiben, du musst also wissen, welches Element du an welcher Stelle des Clusters (und damit an welcher Stelle im Referenzen-Array) hast...
Das mit den großen Clustern ist aber nix genaues...je komplizierter die Datenstruktur ist, desto größer der "Handling-Aufwand" (Prozessorzeit + Speicherverbrauch)
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
Wenn du die Anzahl der Elemente eines im Cluster enthaltenen Arrays haben willst, musst du dir über die Controlreferenz den Value holen und dann ArraySize ermitteln...
Danke. Im Prinzip reicht es, nur die Größe der Arrays zu bestimmen, da sie den größten Teil ausmachen.
Ich dachte, es gibt vielleicht eine einfache Funktion, um die Größe des gesamten Clusters zu bestimmen.
' schrieb:Du musst die einzelnen enthaltenen Controls aber noch mit "To more specific class" genauer beschreiben
Wie geht das genau?
' schrieb:Das mit den großen Clustern ist aber nix genaues...je komplizierter die Datenstruktur ist, desto größer der "Handling-Aufwand" (Prozessorzeit + Speicherverbrauch)
Erstens: SizeOf() geht nicht. Wie auch in C etc. Auch bei Arrays in struct liefert SizeOf() nur die struct-Größe, nicht aber die Datengröße einschließlich Array-Größe.
Zweitens: Bedenke auch, dass Arrays und Strings nicht unbedingt im Cluster direkt liegen. Beides sind, wie in C etc, komplexe Typen. Hier liegt lediglich die Steuerung im Cluster, nicht aber die Daten direkt.
' schrieb:Danke. Im Prinzip reicht es, nur die Größe der Arrays zu bestimmen, da sie den größten Teil ausmachen.
Cluster entbundeln bis das Array erscheint und das Element "Arraylänge" verwenden.
Zitat:Ich dachte, es gibt vielleicht eine einfache Funktion, um die Größe des gesamten Clusters zu bestimmen.
Ist mir nicht bekannt.
Ich pack ja auch immer alles in Cluster. Ist halt recht einfach für den Datenfluß - ein Wire statt 1000. Nur: Soviel, dass es Performance-Probleme gibt hatte selbst ich nocht nicht. Wie groß sind denn die Arrays im Cluster?
Man muss nicht zwangsläufig echten Datenfluß verwendet. Man kann auch "funktionale SubVIs" nehmen. Das ist ein SubVI, das Daten in einem Schieberegister hält. Das ist dann wie ein Modul, in das man die Daten schreiben kann und wieder auslesen.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
03.04.2009, 10:30 (Dieser Beitrag wurde zuletzt bearbeitet: 03.04.2009 10:32 von RoLe.)
' schrieb:Den Cluster "schleppe" ich dann durch alle VI's durch. Ab einer gewissen Größe wirkt sich das auf
die Performance aus. Um dies zu optimieren, wäre es gut, wenn man die Größe bestimmen könnte.
Ich "schleppe" im Cluster nur noch Referenzen rum.
Den "Cluster" (ohne ref) habe ich in ein SubVI gemacht mit get/set/init, und rufe das nur auf, wenn ich was vom Cluster brauche.
Ob das jetzt besser ist ....
EDIT: IchSelbst war mal wieder schneller als IchSelber ....
.·´¯)--> Leben ist das, was dir passiert, wenn du eifrig dabei bist andere Pläne zu machen <--(¯`·.
' schrieb:Ich pack ja auch immer alles in Cluster. Ist halt recht einfach für den Datenfluß - ein Wire statt 1000. Nur: Soviel, dass es Performance-Probleme gibt hatte selbst ich nocht nicht. Wie groß sind denn die Arrays im Cluster?
Das größte Element ist ein 2-Dim Double Array. Die genaue Größe hängt vom Benutzer ab.
Im konkreten Fall betrug die Größe 30'000 x 4. Das hat dann die Zykluszeit um ca. 8ms
vergrößert.
' schrieb:Ich "schleppe" im Cluster nur noch Referenzen rum.
Den "Cluster" (ohne ref) habe ich in ein SubVI gemacht mit get/set/init, und rufe das nur auf, wenn ich was vom Cluster brauche.
Ob das jetzt besser ist ....
In meinem Cluster ist auch ein Array. Es enthält alle Referenzen der Bedienelemente des Hauptprogramms.
Damit können auch Sub-VIs z. B. Elemente deaktivieren.