Also, zum messen habe ich mir mal was einfallen lassen:
Quelltext
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:
| const File1 = 'E:\Autorun.inf'; Files: Array[0..4] Of String = ('E:\Data.csv', 'E:\Opera32.exe', 'E:\Intro.exe', 'E:\Oprjs32.dll', 'E:\OpTree32.dll'); var S: TMemoryStream; A, B, F, FileSize: Int64; I: Integer; Speed: Double; begin S := TMemoryStream.Create; S.LoadFromFile(File1); // 1. Datei lesen (für Spin-Up) FileSize := 0;
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL); // Höchste Priorität QueryPerformanceCounter(A); // Zeit speichern For I := Low(Files) To High(Files) Do begin S.LoadFromFile(Files[I]); // Dateien lesen FileSize := FileSize + S.Size; // Größe speichern end; QueryPerformanceCounter(B); // Zeit speichern SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_Normal); // Priorität zurücksetzen
QueryPerformanceFrequency(F); Speed := (FileSize / (150 * 1024)) / ((B - A) / F); // speed = 150kB / Sekunden (150kB/s = 1-fach) ShowMessageFmt('%.3fMB in %.3fs'#13#10'%.0f-fach', [FileSize / (1024 * 1024), (B - A) / F, Speed]); S.Free; |
Die Probleme:
- Du müsstest vor dem lesen den Lese-Puffer des aufwerks leeren, ich weiß aber nicht, wie man das macht
- Die Angaben stimmen sowieso nicht. Aber du kannst ja mal probieren, ob du die Prozedur so modifizieren kannst, dass es stimmt.
- Wenn ein Laufwerk 30x heißt, dann liest es in der Praxis normalerweise nicht mit der vollen Geschwindigkeit. Das bedeutet, mit Messen kommst du theoretisch nie auf das exakte Ergebnis.