7*600*000*000 octets pour un fichier texte contenant 200000000 lignes comme ceci "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'#13#10"
Temps de Génération : 430 949 ms (encore parce que j'écrivais par paquet de 100 lignes)
Je fais le comptage de ligne maintenant ...
EDIT en 706 841 ms, il m'a compté mes 200 000 000 lignes, si tu reste en TextFile, il n'y pas de limite car il ne gère pas sa position pour gérer savoir sa fin comme le File non typé qui le gère avec un FilePos / FileSize ... donc pas de soucis avec les 10Go, juste le temps, ...
Maintenant, faut voir si l'on peut avoir plusieurs fois le même fichier texte dans plusieurs TextFile, car sans Seek, l'algo sera chiant et lent, alors qu'en fichier par Handle Windows, avec le Seek, ce sera plus facile, pas forcément plus rapide car l'on perdra la gestion par buffer du TextFile
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 procedure TFrmTestFichier.BtnCountLineInFileClick(Sender: TObject); var FLNC: TextFile; TimeIteration: Integer; CountLn, StartTick, EndTick, TickPerSec: Int64; begin QueryPerformanceCounter(StartTick); try CountLn := 0; AssignFile(FLNC, EdPathSearch.Text); Reset(FLNC); try while not Eof(FLNC) do begin Inc(CountLn); Readln(FLNC); end; finally CloseFile(FLNC); end; finally QueryPerformanceCounter(EndTick); QueryPerformanceFrequency(TickPerSec); TimeIteration := Round((EndTick - StartTick) / TickPerSec * 1000); end; MemoShort.Lines.Add('CountLine : ' + IntToStr(TimeIteration) + ' ms'); ShowMessage(IntToStr(CountLn)); end;
Partager