Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.171 Beiträge
 
Delphi 12 Athens
 
#5

Re: CreateFile + FILE_FLAG_OVERLAPPED arbeitet nicht asyncho

  Alt 12. Nov 2007, 13:18
also in Bezug auf Dateien ist es eigentlich recht klar/einfach (sollte es jedenfalls)

mit FILE_FLAG_SEQUENTIAL_SCAN teile ich Windows mit, daß ich die Sectoren der Datei nur der Reihe nach einlesen will
http://support.microsoft.com/kb/98756/de

wärend FILE_FLAG_RANDOM_ACCESS Windows darauf hinweißt, daß man kreuz und quer auf die Datei zugreifen möchte.

durch diese Beiden Optionen kann Windows seine Verwaltung der Daten etwas optimieren, da es "weiß" wie wir zugreifen wollen.


mit FILE_FLAG_NO_BUFFERING wirdmitgeteilt, daß ich die Daten direkt von der Platte lesen will und nicht eine eventuelle Kopie aus der Filecache möchte.
bzw werden die eingelesenen Daten nicht in die Filecache geladen und erst danach meinem Programm übergeben.

FILE_FLAG_WRITE_THROUGH weißt windows an die Daten direkt in die Datei / auf die Festplatte zu schreiben und nicht erst in der Filecache zwischischenzuspeichern und diese nicht nur nach Lust und Laune irgendwann mal auf der Platte zu kopieren

tja und dank FILE_FLAG_OVERLAPPED soll die Funktion asynchron arbeiten, ReadFile und WriteFile kehren sofort zurück und warten nicht auf das Ende des Schreib-/Lesevorgangs.


also die anderen Parameter sind schon für eine flüssige Abarbeitung der Aufgabe wichtig.
FILE_FLAG_OVERLAPPED .. nja, in den Funktionen ist sozusagen ein schleife eingebaut, die wartet bis die gewünschten Daten im Puffer sind.
tja und diese Warteschleife wollte ich mir rausverlegen, sodaß das Programm Zeit für andere Dinge hat, bevor es selber eine Warteschleife ausführt.

wie schon rausgefunden kann ich beim Schreiben notfalls auf FILE_FLAG_NO_BUFFERING verzichten (jedenfalls hab ich noch keine Nebenwirkungen entdeckt),
aber beim Lesen brauch ich FILE_FLAG_NO_BUFFERING schon, da sonst der RAM/die FileCache unnötig zugemüllt wird und vorallem bei großen Dateien der Prozess enorm durch die FileCache verlangsamt wird.

bei meinem Rechner z.B. beim Lesen
über 38 MB/s ohne FileCache gegenüber der 15 MB/s mit FileCache.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat