LabVIEWForum.de
Größe eines Cluster-Elements bestimmen (Sizeof) - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Größe eines Cluster-Elements bestimmen (Sizeof) (/Thread-Groesse-eines-Cluster-Elements-bestimmen-Sizeof)

Seiten: 1 2 3


Größe eines Cluster-Elements bestimmen (Sizeof) - FEL - 03.04.2009 08:52

Hi Leute,

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.

Gruß


Größe eines Cluster-Elements bestimmen (Sizeof) - Achim - 03.04.2009 09:35

Du kannst dir mit dem Property "Controls" ein Array aller Referenzen im Cluster holen und das für jedes enthaltene Control weitertreiben...


Größe eines Cluster-Elements bestimmen (Sizeof) - FEL - 03.04.2009 09:54

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?


Größe eines Cluster-Elements bestimmen (Sizeof) - Achim - 03.04.2009 09:59

Was meinst du mit Größe?

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)


Größe eines Cluster-Elements bestimmen (Sizeof) - FEL - 03.04.2009 10:11

' schrieb:Was meinst du mit Größe?

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)
Was wäre die Alternative?

Gruß


Größe eines Cluster-Elements bestimmen (Sizeof) - Achim - 03.04.2009 10:24

[attachment=17592]Lv82_img


Was die Alternative zu deiner Datenstruktur ist kann ich dir nicht sagen...ich kenne doch die näheren Umstände nicht...


Größe eines Cluster-Elements bestimmen (Sizeof) - IchSelbst - 03.04.2009 10:25

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.


Größe eines Cluster-Elements bestimmen (Sizeof) - RoLe - 03.04.2009 10:30

' 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 .... Big Grin


Größe eines Cluster-Elements bestimmen (Sizeof) - FEL - 03.04.2009 10:45

' 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.


Größe eines Cluster-Elements bestimmen (Sizeof) - FEL - 03.04.2009 10:49

' 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.