![]() |
Optimiert Dateien laden
Hallo zusammen
Mich interessiert, wie man am schnellsten (binäre) Dateien laden kann. Ich dachte mir, am besten gehts wohl, wenn man immer so ein Kilo auf einmal lädt. So etwa stelle ich mir das vor:
Delphi-Quellcode:
Was meint ihr dazu?
const
BLOCK_SIZE = 1024; function LoadFile(const FileName: string; out Data: PChar): Int64; var Handle: Integer; Size: Int64; BytesRead: Integer; P: PChar; begin Data:= nil; Result:= -1; Handle:= FileOpen(FileName, fmOpenRead or fmShareDenyWrite); if Handle <> -1 then try Size:= GetFileSize(FileName); GetMem(Data, Size); try P:= Data; repeat BytesRead:= FileRead(Handle, P^, BLOCK_SIZE); Inc(P, BytesRead); until BytesRead = 0; Result:= Size; except FreeMem(Data, Size); Data:= nil; end; finally FileClose(Handle); end; end; Gruss Shaman |
Re: Optimiert Dateien laden
Delphi-Quellcode:
Sollte besser heissen
until BytesRead = 0;
Delphi-Quellcode:
Sonst liest Du nach dem letzten Block nochmal ein, falls die Dateigröße nicht ohne Rest durch BLOCK_SIZE teilbar ist.
until BytesRead < BLOCK_SIZE;
|
Re: Optimiert Dateien laden
Zitat:
Ja, im Prinzip ist's so besser als wenn du jedes byte einzeln einliest, die Blockgröße hängt aber vom Dateisystem und der sonstigen Umgebung (konkurrierende Zugriffe auf die Festplatte, konkurrierende Zugriffe auf die gleiche Datei, etc) ab. In dem Fall könntest du sogar die gesamte Datei auf einmal einlesen, da du alle Daten haben willst und linear liest. Bei zufälligem Lesen oder wiederholtem Lesen von kleinen Datenmengen bietet sich aber ein größerer Puffer an. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz