| 
	
		
			| 
					28.11.2008, 09:44  
				 |  
			| 
					
                                                 |   IchSelbst
   LVF-Guru
 
      
 
 Beiträge: 3.708
 Registriert seit: Feb 2005
 
 11, 14, 15, 17, 18
 -
 DE
 
 97437
 Deutschland
 
 | Datei-Parser optimieren 
					' schrieb:Wenn eg genug Speicher hat, würde ich die Datei vorher komplett auslesen und das Parsen (die Schlaufe) wird noch schneller ohne das Datei lesen. 
Das ist ein guter Vorschlag: Umstellen von automatischem Filestream auf selbstgemachtes U8-Array-Auslesen: File in U8-Array einlesen. U8-Array über Index, der hochgezählt wird, auslesen. Dann steigt zwar die Komplexität des eigenen Sourcecodes, sollte aber um einiges schneller sein als Filestream.
				 
 
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller). 
				
				 |  |  
			|  |  
	
		
			| 
					28.11.2008, 21:33  (Dieser Beitrag wurde zuletzt bearbeitet: 28.11.2008 21:33  von eg.) |  
			|  |  
			|  |  
	
		
			| 
					29.11.2008, 12:56  
				 |  
			| 
					
                                                 |   Lucki
   Tech.Exp.2.Klasse
 
   
 Beiträge: 7.699
 Registriert seit: Mar 2006
 
 LV 2016-18 prof.
 1995
 DE
 
 01108
 Deutschland
 
 | Datei-Parser optimieren 
					' schrieb:Das Prog habe ich im Nachfolgerthema gepostet: 
Gut, dann werde ich mich mal dorthin auf die Socken machen..
				 
				
				 |  |  
			|  |  
	
		
			| 
					07.12.2008, 11:57  
				 |  
			| 
    |  
			|  |  
	
		
			| 
					07.12.2008, 19:26  
				 |  
			| 
					
                                                 |   Lucki
   Tech.Exp.2.Klasse
 
   
 Beiträge: 7.699
 Registriert seit: Mar 2006
 
 LV 2016-18 prof.
 1995
 DE
 
 01108
 Deutschland
 
 | Datei-Parser optimieren 
					' schrieb:Schieberegister sind in LabVIEW seit mindestens Version 6 sowas von optimalisiert. 
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
				 
				
				 |  |  
			|  |  
	
		
			| 
					07.12.2008, 21:11  (Dieser Beitrag wurde zuletzt bearbeitet: 07.12.2008 21:12  von rolfk.) |  
			| 
					
                                                 | rolfk
   LVF-Guru
 
      
 
 Beiträge: 2.318
 Registriert seit: Jun 2007
 
 alle seit 6.0
 1992
 EN
 
 2901GG
 Niederlande
 
 | Datei-Parser optimieren 
					' 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
				 
 
				
				 |  
    |  
			|  |  |  |