Performance-Frage: Große Arrays in Cluster-Schieberegister
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!
26.07.2010, 09:34 (Dieser Beitrag wurde zuletzt bearbeitet: 26.07.2010 09:37 von Matze.)
Performance-Frage: Große Arrays in Cluster-Schieberegister
Guten Morgen,
ich verwende für mehrere parallele Messungen Schieberegister. Angeschlossen sind jeweils Cluster, die u.a. 2 Arrays mit Double-Messwerten beinhalten und die ich in einer Schleife fortlaufend fülle.
Über das Tool "Leistung und Speicher" konnte nicht feststellen, was genau lange benötigt, aber mit zunehmender Messzeit wird mein Programm langsamer.
Da ich mehrere Werte setzen/auslesen muss, habe ich als Schieberegister den Cluster gewählt, auch wenn ein direktes Array-Schieberegister vermutlich schneller wäre.
Da ist mir der Verdrahtungsaufwand allerdings zu hoch.
Ist mein Vorgehen mit den Clustern für viele Messwerte (die Arrays könnten je ca. 20.000 Werte fassen) zu empfehlen oder geht es schneller (Referenzen o.ä.)?
Die Messwerte füge ist fortlaufend über "Array erstellen" (Eingänge verknüpfen) hinzu. Das wird generell nicht empfohlen, da dies langsam ist und laufend Werte hin und her kopiert werden müssen. Nur ist mir die genaue Werteanzahl unbekannt, weshalb ich von vornherein kein Array initialisieren kann, bei dem ich dann die Werte nur noch ersetze.
Ich vermute zumindest, dass bei der Cluster-Array-Geschichte die Ursache liegt.
Performance-Frage: Große Arrays in Cluster-Schieberegister
Hallo,
im Prinzip weißt du, wo dein Problem liegt, und hast es auch schon beschrieben, nämlich die Build-Array-Funktion:
' schrieb:Die Messwerte füge ist fortlaufend über "Array erstellen" (Eingänge verknüpfen) hinzu. Das wird generell nicht empfohlen, da dies langsam ist und laufend Werte hin und her kopiert werden müssen.
Das braucht Zeit. Wobei jetzt 20.000 Werte noch nicht das Riesen-Array ist.
' schrieb:Nur ist mir die genaue Werteanzahl unbekannt, weshalb ich von vornherein kein Array initialisieren kann, bei dem ich dann die Werte nur noch ersetze.
Kannst du vielleicht mit einer Maximalgröße des Arrays arbeiten? z.B. 50.000 Werte, die zu Beginn mit "NaN" vorbelegt sind?
Von Referenzen auf Controls oo.ä. rate ich ab, das ist garantiert langsamer.
Ob eine Data Value Reference (neu seit) was bringt, kann ich nicht sagen, habe das noch nie gebraucht:
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!
Performance-Frage: Große Arrays in Cluster-Schieberegister
Hallo Jens,
genau diese Referenz meine ich (Data Value).
Ich denke schon, dass ich das Array vorbelegen könnte. Darf ich denn dann auf "NAN" prüfen, um das Ende des Arrays festzustellen oder wie geht man hier vor?
Performance-Frage: Große Arrays in Cluster-Schieberegister
Hallo Mechatroniker,
wenn du die Arrays mit NaN vorbelegst, kannst du schlecht mit NaN auf Arrayende prüfen... Oder wie meinst du das?
Pack dir doch einfach einen Datencounter mit in den Cluster. Dort merkst du dir, wieviele Elemente schon ins Array geschrieben wurden und addierst die neuen Elemente einfach dazu. Bei Überlauf ("Array voll") musst du dann alte Einträge überschreiben...
Dieser Beitrag soll weder nützlich, informativ noch lesbar sein.
Er erhebt lediglich den Anspruch dort wo er ungenau ist, wenigstens eindeutig ungenau zu sein.
In Fällen größerer Abweichungen ist es immer der Leser, der sich geirrt hat.
Rette einen Baum!
Diesen Beitrag nur ausdrucken, wenn unbedingt nötig!
26.07.2010, 10:27 (Dieser Beitrag wurde zuletzt bearbeitet: 26.07.2010 10:28 von Matze.)
Performance-Frage: Große Arrays in Cluster-Schieberegister
Hallo Gerd
' schrieb:wenn du die Arrays mit NaN vorbelegst, kannst du schlecht mit NaN auf Arrayende prüfen... Oder wie meinst du das?
Array-Ende war falsch ausgedrückt. Ich meinte das Ende der eingetragenen Messwerte. ALso ab wann das 1. Mal NAN enthaten ist.
Aber stimmt, ich könnte die Werte auch nebenher hochzählen.
Was mir fast lieber wäre, wenn ich das Array Stück für Stück vergrößern kann.
Zu Beginn z.B. mit Länge 2000. Wenn die Anzahl der Messwerte 2000 übersteigt, wird die Länge auf 4000 gesetzt.
Nachtrag @SeBa: Danke, das muss ich erstmal auf mich einwirken lassen.
Performance-Frage: Große Arrays in Cluster-Schieberegister
' schrieb:Was mir fast lieber wäre, wenn ich das Array Stück für Stück vergrößern kann.
Zu Beginn z.B. mit Länge 2000. Wenn die Anzahl der Messwerte 2000 übersteigt, wird die Länge auf 4000 gesetzt.
Da sehe ich eine potenzielle Fehlerquelle, wenn deine Applikation lange laufen soll. Da LV den Speicher am Stück allokieren muss und dein RAM eventuell schon zu fragmentiert ist, kann es sein dass LV keinen Speicher mehr am Stück erhält und die ganze Sache geht in die Hose.