' schrieb:Das Problem ist, dass ich nicht genau weiss mit wie vielen Werten ich meine Arrays vorinitialisieren soll. Evtl. kann man es aus der Dateigröße ausrechnen, aber einfach ist es nicht, da ich unterschiedliche Pakete mit unterschiedlichen Frequenzen (also zufälliges Vorkommen) im File habe. Wenn die Pakete von einem Typ wären, dann ginge es einfach.
In dem Falle mache ich es meist so dass ich mit einer gewissen Grösse beginne, diese Grösse zusammen mit dem aktuellen Pointer (Index) in einem Schieberegister abspeichere und dann jeweils vor dem Einfügen diesen Pointer mit der Grösse vergleiche. Wenn (Pointer >= Size) dann verdopple ich das array und danach kommt immer ein Replace Array Element. Am Schluss wie schon vorgestellt das Array auf die richtige Länge abkappen.
In früheren LabVIEW Versionen brachte sowas in einem Szenario wie hier von dir vorgegeben eine signifikante Laufzeitverbesserung. Vielleicht dass das in LabVIEW >= 8.5 nicht mehr so enorm ist. Natürlich immer vorausgesetzt Du hast ein paar tausend Arrayelemente. Wegen 10 mal Build Array bricht die Laufzeit noch lange nicht zusammen.
' schrieb:Würde ich nicht so machen, das ist eher eine Speicherverwendungsoptimierung und bremmst deine Schlaufe aus.
Du wolltest es ja möglichst schnell haben.
Auch wer C (oder Delphi) programmiert kann den falschen Ansatz wählen
Also mit einer jeweiligen Verdopplung des Arrays ist die Anzahl der Resizes sowas von minim, dass das kaum ins Gewicht fallen sollte. Ich bevorzuge ein paar ms zu Verschwenden um nicht für den Worstcase 100MB grosse Arrays anlegen zu müssen die dann auf wenige MB reduziert werden müssen. Die daraus resultierende Speicherauslastung kann das Programm im Endeffekt sogar langsamer machen als die (exponentielle) Vergrösserung des Arrays zwischendurch.
Rolf Kalbermatter