' schrieb:offtopic:
Bewirkt das Vorinitialisieren des Schieberegisters nicht wenigstens eine theoretische Erleichterung für den LV-Compiler? Und reicht ein Array der Länge Null für die korrekte Initialisierung oder muss es schon die richtige Länge haben um Nutzen zu haben?
Also in Matlab war es ein deutlicher Performanceunterschied, ob man jetzt das Array dynamisch hat wachsen lassen (-> langsam) oder ein mit Nullen vorinitialisiertes Array der passenden Größe mit Werten gefüllt hat (-> deutlich schneller).
Edit: Es kann natürlich gut sein, dass LV erkennt wodrauf der Code hinaus will und regelt alles in Eigenregie.
Mal schauen, worauf du genau hinaus willst, ich gebe einmal eine allgemeine Antwort.
1. Wenn LabVIEW weiss, wie oft eine For-Schleife durchlaufen wird (und das ist ja bekannt), dann ist das Erstellen eines Arrays am Ausgang per Auto-Indexing die empfohlene Methode.
2. Bei deiner Lösung ist folgendes schlecht: Du schiebst ein leeres Array in das Shift-Register, und hängst dann immer per Build-Array ein neues Element hinzu. Build-Array bedeutet aber immer "Kopieren im Speicher", sprich, es wird Speicher für das neuere größere Array alloziert und dann das bestehende Array + neues Element kopiert, dann das alte Array freigegeben.
3. Performancemäßig identisch mit Methode 1 sollte sein:
- Array in der schon korrekten Größe vordefinieren (Initialize Array VI).
- Jetzt in der Schleife immer mit "Replace Array Subset" arbeiten.
Methode 3 kann also bei While-Schleifen von Vorteil sein. Oder wenn noch irgendeine Fallunterscheidung in der Schleife drin ist, und nicht in jedem Fall ein neues Element hinzugefügt wird. Dann alloziert man die max. Größe vor, arbeitet immer mit Replace ... und schneidet nach der Schleife das Array auf die gewünschte Größe ab (-> Funktion Array Subset).
Gruß, Jens