Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
Delphi 7 Enterprise
|
AW: Viele Dateien performant einlesen
30. Apr 2014, 16:48
Die Antwort ist 134217728
Delphi-Quellcode:
procedure TForm1.btnOpenLowLevelClick(Sender: TObject);
var
AFiles : TStringDynArray;
fh : THandle;
fl, fr : LongWord;
i : integer;
Buffer : Pointer;
begin
Watch.Start;
AFiles := TDirectory.GetFiles(FDir);
Watch.Stop;
Prot('GetFiles', Watch);
Watch.Reset;
for i := Low(AFiles) to High(AFiles) do
begin
Watch.Start;
fh := CreateFile(PChar(AFiles[i]), GENERIC_READ,
FILE_SHARE_READ, nil, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL or FILE_FLAG_SEQUENTIAL_SCAN, 0); // Optimiert für nur vorwärts lesen
fl := GetFileSize(fh, nil);
fr := 0;
GetMem(Buffer, fl);
ZeroMemory(Buffer, fl);
ReadFile(fh, Buffer^, fl, fr, nil);
CloseHandle(fh);
FreeMem(Buffer);
Watch.Stop;
end;
Prot('Lowlevel open', Watch);
Watch.Reset;
end;
Damit liest er die 5000 Dateien in 160-400 ms komplett ein, auch wenn diese gerade frisch erzeugt wurden.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
|
|
Zitat
|