03.04.2009, 08:52
Beitrag #1
|
FEL
LVF-Gelegenheitsschreiber
Beiträge: 66
Registriert seit: Jun 2007
2015
2005
DE_EN
04229
Deutschland
|
Größe eines Cluster-Elements bestimmen (Sizeof)
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ß
|
|
|
03.04.2009, 09:35
Beitrag #2
|
|
|
03.04.2009, 09:54
Beitrag #3
|
FEL
LVF-Gelegenheitsschreiber
Beiträge: 66
Registriert seit: Jun 2007
2015
2005
DE_EN
04229
Deutschland
|
Größe eines Cluster-Elements bestimmen (Sizeof)
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?
|
|
|
03.04.2009, 09:59
Beitrag #4
|
|
|
03.04.2009, 10:11
Beitrag #5
|
FEL
LVF-Gelegenheitsschreiber
Beiträge: 66
Registriert seit: Jun 2007
2015
2005
DE_EN
04229
Deutschland
|
Größe eines Cluster-Elements bestimmen (Sizeof)
' 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ß
|
|
|
03.04.2009, 10:24
Beitrag #6
|
|
|
03.04.2009, 10:25
Beitrag #7
|
IchSelbst
LVF-Guru
Beiträge: 3.692
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Größe eines Cluster-Elements bestimmen (Sizeof)
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.)
Beitrag #8
|
RoLe
LVF-Guru
Beiträge: 1.236
Registriert seit: Jul 2007
-
1997
en
0
Schweiz
|
Größe eines Cluster-Elements bestimmen (Sizeof)
' 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 <--(¯`·.
|
|
|
03.04.2009, 10:45
Beitrag #9
|
FEL
LVF-Gelegenheitsschreiber
Beiträge: 66
Registriert seit: Jun 2007
2015
2005
DE_EN
04229
Deutschland
|
Größe eines Cluster-Elements bestimmen (Sizeof)
' 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.
|
|
|
03.04.2009, 10:49
|
FEL
LVF-Gelegenheitsschreiber
Beiträge: 66
Registriert seit: Jun 2007
2015
2005
DE_EN
04229
Deutschland
|
Größe eines Cluster-Elements bestimmen (Sizeof)
' 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.
|
|
|
| |