' schrieb:Danke für diese Information, genau so hatte ich das schon vermutet.
Ich staune auch, wie schnell die Funktion "Array umkehren" ist. Nach meiner Vorstellung müssen dort bei 1000 Elementen 500 Paare getauscht werden, und trotzdem ist es rasend schnell.
Gerade heute habe ich wieder etwas entdeckt: ein binäre File ganz einlesen kann man beschleunigen, wenn man nicht als Anzahl der Bytes "-1" (= alle) anschließt, sondern erst das VI für die Anzahl der Bytes aufruft, und dann diese Anzahl an das Read-VI anschließt.
Grüße Ludwig
LabVIEW kennt intern etwas dass bei NI SubArray genannt wird. Dass ist ein spezieller Datentype der nur einen Pointer auf ein Array enthält sowie Informationen über die Anordnung der Daten darin. Bei 1D Arrays etwa sowas wie Stride (Interval), Length und Direction. Wenn Du also dann "Invers Array" machst wird eigentlich nur ein Subarray angelegt, diesem der Pointer auf das originale Array zugewiesen und das Direction Inversed Flag gesetzt. Alle Array Funktionen sind dann so schlau um bei Subarrays die Indexierung entsprechend anzupassen. Natürlich funktioniert das nur solange die Subarrays innerhalb von LabVIEW bleiben. Bei schreiben nach Disk, Flattenen oder beim übergeben des Arrays an eine DLL fällt das effektive kopieren halt trotzdem an.
Dasselbe passiert beispielsweise bei 2D Arrays wenn sie transposed werden. Subarray angelegt, pointer auf originales Array übergeben und trasnposed Flag gesetzt et voila, 500MB Daten in weniger als 1ms transposed
.
Eine autoindexing Loop oder ein Arrayindex passt dann einfach die Indexberechnung an und funktioniert immer noch korrekt. Funktioniert beispielsweise gewaltig wenn man ein 2D Array transposen muss um in einer autoindex Loop die innere Dimension zu veränderen und danach wieder alles zurücktransposed. Effektiv wird nichts transposed sondern nur der autoindexing Loop ein anderes Indexing vorgegeben.
Rolf Kalbermatter