| Autor | Beitrag | 
| BenBE 
          Beiträge: 8721
 Erhaltene Danke: 191
 
 Win95, Win98SE, Win2K, WinXP
 D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
 
 | 
Verfasst: Mo 20.10.08 16:29 
 
Was ist an Goto eigentlich so gruselig??? Ist doch auch nur Source  _________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
 | 
|  | 
| jaenicke 
          Beiträge: 19326
 Erhaltene Danke: 1749
 
 W11 x64 (Chrome, Edge)
 Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
 
 | 
Verfasst: Mo 20.10.08 17:34 
 
Sprich es mal aus   :
 [Tiefe Stimme]Gooooo....toooooo... *echo* *schall*[/Tiefe Stimme] | 
|  | 
| Heiko  
          Beiträge: 3169
 Erhaltene Danke: 11
 
 
 
 
 | 
Verfasst: Mi 19.11.08 21:26 
 
moin moin,
 da hier ja nach Testerfahrungen gefragt wurde: also bisher habe ich nur die repne-Variante getestet. Allerdings ist die Variante um Faktor 4 langsamer als das readln von Delphi. Hat einer von euch da ne Ahnung, wo ich so ineffizient bin bzw. wie Borland es macht? Ich sehe im ASM-Code von readln leider nicht durch, wie er genau vorgeht.
 
Einloggen, um Attachments anzusehen!
 | 
|  | 
| Horst_H 
          Beiträge: 1654
 Erhaltene Danke: 244
 
 WIN10,PuppyLinux
 FreePascal,Lazarus
 
 | 
Verfasst: Do 20.11.08 14:19 
 
Hallo,
 Dein readln bremst Dich doch garnicht:
 aus deiner *.dpr habe ich statt readln einfach nur die Position geändert:
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 
 |     FSW:=TFileStreamW.Create('Test.txt', fmOpenRead);t:=GetTickCount;
 while FSW.Position<FSW.Size do
 FSW.Position:= FSW.Position+i;
 inc(t2, GetTickCount-t);
 FSW.Free;
 |  Das ist 2 Sekunden schneller als readln.
 readln 12,5 Sekunden /Position ändern 10,4 Sekunden.
Du suchst an der falschen Stelle nach der Bremse im System. Gruß Horst | 
|  | 
| jaenicke 
          Beiträge: 19326
 Erhaltene Danke: 1749
 
 W11 x64 (Chrome, Edge)
 Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
 
 | 
Verfasst: Do 20.11.08 14:46 
 
Was ist i? Du änderst so doch nur die Position um einen festen Wert? Was hat das mit dem Thema zu tun? | 
|  | 
| Horst_H 
          Beiträge: 1654
 Erhaltene Danke: 244
 
 WIN10,PuppyLinux
 FreePascal,Lazarus
 
 | 
Verfasst: Do 20.11.08 17:17 
 
Hallo,
 Es wird eine Textdatei erzeugt in der alle i Zeichen ein CR/LF/CR+LF eingefügt wird.
 Damit rücke ich im Stream genauso oft vor wie das vorherige auskommentierte readln.
 Also wird die while-Schleife genauso oft durchlaufen.Somit hat man ähnliche Bedingungen.
 Also readln wird nicht ausgeführt, bei dem beim Einlesen auch die Position geändert wird.
 Der overhead für das Einlesen und suchen nach dem Zeilenende selbst wollte ich wissen.
 Das verzweifelte suchen Heiko's ,nach einer Beschleungung der CharPos - Funktion, geht also am wahren Problem vorbei.
 
 Gruß Horst
 | 
|  | 
| Heiko  
          Beiträge: 3169
 Erhaltene Danke: 11
 
 
 
 
 | 
Verfasst: Do 20.11.08 18:03 
 | 
|  | 
| Horst_H 
          Beiträge: 1654
 Erhaltene Danke: 244
 
 WIN10,PuppyLinux
 FreePascal,Lazarus
 
 | 
Verfasst: Do 20.11.08 18:44 
 
Hallo,
 	  | Zitat: |  	  | Der overhead für das Einlesen und suchen nach dem Zeilenende selbst wollte ich wissen. | 
 Wenn man die Position in so kleinen Schritten ändert, wird der Stream vom Betreibssystem bis dorthin auch eingelesen (falls es das nicht sowieso schon ist, des vorauslesens read ahead) . 
 Der Zeitliche Unterschied Postion/readln rührt also nur von dem Kopieren der Streamdaten in deinen Puffer und dem suchen des Zeilenendes her. 
 Und da war ich erstaunt über das geringe Tempo.
 Die Datei ist doch just vorher geschrieben worden und müßte noch im Cache sein und mit maximaler Geschwindigkeit gelesen werden können (ich glaube 350 oder 700 Mb/s waren da mal..) also für 1 Mb 30 ms oder so . 
 Und wenn man bedenkt das Delphi-readln etwas länger als Dein Overhead für Dein-readln braucht, bedeutet dies:
 Delphi liest aus dem Cache und Dein readln könnte minimal schneller sein.
 Lange Rede keinen Sinn:
 Kannst Du meine Messwerte bestätigen Position statt readln nutzend??
 Gruß Horst | 
|  | 
| Heiko  
          Beiträge: 3169
 Erhaltene Danke: 11
 
 
 
 
 | 
Verfasst: Do 20.11.08 18:52 
 
	  |  Horst_H hat folgendes geschrieben  : |  	  | Lange Rede keinen Sinn: Kannst Du meine Messwerte bestätigen Position statt readln nutzend??
 | 
 Ungefähr: Borland-Radln: 3,5Sek. Mein ReadLn: 15Sek. Letzteres nur mir Pos. setzten: 10 Sek.
 Allerdings verstehe ich auch nicht, wieso Borland da schneller ist. Denn eigentich müssten wir beide aufn Cache zugreifen, sofern Win den nutzt... | 
|  |