(15.08.2011 15:20 )Hubert R. schrieb: While mit Schieberegister oder For. Besser = weniger Rechenbelastung bzw. schneller.
Als Ergänzung zur Antwort von Gerd:
Riesenhafte Zeiten entstehen leicht bei der Erstellung großer Arrays, wenn Labview vorher nicht weiß, wie groß das Array letztendlich wird. Es muß dann mehrmals im Memory etwas neu arrangiert werden, und das dauert. Dazu drei (hoffentlich eindrucksvolle) Beispiele:
Beispiel 1: Über den Indexanschluß eine While-Schleife:
Labview hat keine Ahnung, daß dieses Array so groß werden wird (LV ist nicht so intelligend, sich die Arraygröße aus dem Code heraus zu berechen. Wir sehen sofort, das Array hat 1E7 Elemente - Labview weiß das nicht) Dauer: 25sec !
Die gleiche Zeit hätte man bei aufaddieren der Elemente über Schieberegister. Es ist also egal, ab Schieberegister oder Indexanschluß - wenn Labview nicht von Anfang an weiß, wie groß das Array wird, ist beides gleich schlecht.
Beispiel 2:
Selbes Beispiel, Ausführung über For-Schleife mit Bedingungsanschluß.
Es wird zwar bei jedem Duchlauf, genau wie bei der while-Schleife, berechnet ob die Abbruchbedingung erfüllt ist. Über den N-Anschluß ist LV jedoch über eine maximale Arraygröße von 2E7 Elementen vorinformiert und reserviert diese Größe im Memory. Die Folge ist eine drastische Veringerung der Ausführungszeit: 0.7 sec
Bei älteren LV-Versionen gab es den Bedingungsanschluß noch nicht. Um die while-Schleife in Beispiel 1 schnell zu machen, war eine umständliche Prozedur erforderlich. Es wurde ein großes Array vorinitialisiert, dann wurden die in der Schleife erzeugten Elemente mittels Ersetzen über Schiebregister in das Array eingefügt, und zum Schluß wurden die nicht benutzten Elemente entfernt. Dank der For-Schleife mit Bedingungsanschluß ist das aber Schnee von gestern
Besipiel 3
Selbes Beispiele als For-Schleife:
Das ist natürlich die absolut schnellste Methode. Ausführungdauer: 0.6 sec. Schneller als Beispiel 2 ist es deshalb, weil hier nicht bei jedem Durchlauf berechnet werden muß, ob die Abbruchbedingung erfüllt ist oder nicht.
Und trotzdem: Eine Methode ist noch schneller als die For-Schleife. Die meisten Funktionen sind nämlich polymorph und können auch mit Arrays umgehen. Diese Möglichkeiten sollte man immer nutzen. For-Schleifen sind da nur die zweite Wahl.