Dat mit der union hatte ich bei der Übersetzung wohl dodal übersehn.
Also, Wenn man es so sieht, dann passen die Typengrößen natürlich ... hätte ja beinah schon die Vermutung bekommen, dat die es im 32-Bit-Windows anders definiert hatten.
Hab's entsprechend geändert
Hatte grad keine neue Version von deinem FileSplitter da ... aber daß das noch nicht optimierte langsamer ist, war ja wohl klar.
Code:
Testdatei: 2,4 GB
Meines: 9:39, 9:37
dein Altes: 16:18, 14:02 (5.5.5.1228 28.12.05)
ein aktuellerer Vergleich folgt vermutlich morgen.
Aber 'nen kleinen Test hatte ich dennoch mal gemacht ... ReadFileScatter ist wohl 'nen Hauch schneller gewesen
Code:
4.000.000.000 Byte
ReadFile+NoCache 89,828 s = 42,5 MB/s
ReadFile+NoCache+Async 67,797 s = 56,3 MB/s
ReadFileScatter 67,781 s = 56,3 MB/s
Ach ja, bei dem Testprogramm:
ersma "kleinen" Fehler behoben
dieses
Delphi-Quellcode:
FillMemory(@A1[0], SizeOf(A1), 0);
FillMemory(@A2[0], SizeOf(A2), 0);
durch Folgendes ersetzt
Delphi-Quellcode:
FillMemory(@A1[0], Length(A1) * SizeOf(FILE_SEGMENT_ELEMENT), 0);
FillMemory(@A2[0], Length(A2) * SizeOf(FILE_SEGMENT_ELEMENT), 0);
ReOpenFile-Ersatz eingefügt - wegen SetFilePointer + not sector-aligned + FILE_FLAG_NO_BUFFERING
siehe
SetFilePointer
Und dann noch einiges anderes nachgerüstet ... jetzt sollten wohl schonmal “alle“ möglichen Lese-/Schreibmethoden vorhanden sein.
Muß aber noch ein bissl was ändern ... ist halt nicht so ganz leicht ein halbwegs “gerechtes“ Prüfszenario für alle Metoden zusammenzustellen, vorallem wenn die etwas “chaotische und nicht zu steuernde“ SystemCache so mitspielen soll, wie sie es soll
[add]
ach ja, dat SetFilePointer+NotSectorAligned+FILE_FLAG_NO_BUFFE RING-Problem betraf natürlich auch dieses Programm, daher hier auch nochmal 'ne aktuelle Version ... 's wäre ja nicht schön wenn plötzlich ein paar Bytes mehr in der geteilten Datei auftauchen