![]() |
Testen eines USB3.0-Drives - DISKSPEED
Zum Testen eines USB3.0-Drives habe ich ein kleines Programm gemacht, das ein 100MB-File schreibt und liest.
Dazu verwende ich folgende Funktionen:
Delphi-Quellcode:
Beim Schreiben werden Geschwindigkeiten von 60-70 MB/sec angezeigt, beim Lesen
//data ist ein 100MB-String
function LoadStringFromFile(const fileName : String) : String; var fs : TFileStream; begin fs:=TFileStream.Create(fileName, fmOpenRead+fmShareDenyNone); SetLength(Result, fs.Size); fs.Read(Result[1], fs.Size); fs.Free; end; procedure TForm1.WriteCClick(Sender: TObject); var fs : TFileStream; gtc1, gtc2 : Cardinal; begin filename:= DriveComboBox1.Drive + ':\test.txt'; gtc1:= GetTickCount; fs:=TFileStream.Create(fileName, fmCreate); fs.Write(DATA[1], Length(DATA)); fs.Free; gtc2:= GetTickCount; lbWtimeC.caption:= IntToStr(gtc2-gtc1)+' Millisec '; lbWriteC.caption:= IntToStr(100000 div(gtc2-gtc1))+' MB/sec '; end; procedure TForm1.ReadCClick(Sender: TObject); var s : String; gtc1, gtc2 : Cardinal; begin gtc1:= GetTickCount; s:= LoadStringFromFile(filename); gtc2:= GetTickCount; lbReadC.caption:= IntToStr(100000 div(gtc2-gtc1))+' MB/sec '; lbRtimeC.caption:= IntToStr(gtc2-gtc1)+' Millisec '; end; erscheint ein unglaubwürdiger Wert von über 600 MB/sec. Wer hat Verbesserungsvorschläge? Danke für's Nachdenken und Helfen! |
Re: Testen eines USB3.0-Drives - DISKSPEED
Die Datei wird sich noch im Cache befinden.
|
Re: Testen eines USB3.0-Drives - DISKSPEED
Wenn ich das File umbenenne vor dem Einlesen - kann es dann das erwartete Ergebnis bringen?
--- Negativ. File umbenennen nützt nichts. --- Andere Idee: 100MB-File splitten in zwei 50MB-Files: Schreiben und Lesen ist immer noch um den Faktor 20 verschieden.
Delphi-Quellcode:
//DATA50 = 50MB String
procedure TForm1.ReadCClick(Sender: TObject); var s1,s2 : String; gtc1, gtc2 : Cardinal; begin gtc1:= GetTickCount; s1:= LoadStringFromFile(filename+'1'); s2:= LoadStringFromFile(filename+'2'); gtc2:= GetTickCount; lbReadC.caption:= IntToStr(100000 div(gtc2-gtc1))+' MB/sec '; lbtimeC.caption:= IntToStr(gtc2-gtc1)+' Millisec '; end; procedure TForm1.writeCClick(Sender: TObject); var fs1,fs2 : TFileStream; gtc1, gtc2 : Cardinal; begin filename:= DriveComboBox1.Drive + ':\test.00'; gtc1:= GetTickCount; fs1:=TFileStream.Create(fileName+'1', fmCreate); fs1.Write(DATA50[1], Length(DATA50)); fs1.Free; fs2:=TFileStream.Create(fileName+'2', fmCreate); fs2.Write(DATA50[1], Length(DATA50)); fs2.Free; gtc2:= GetTickCount; lbtimeC.caption:= IntToStr(gtc2-gtc1)+' Millisec '; lbwriteC.caption:= IntToStr(100000 div(gtc2-gtc1))+' MB/sec '; end; |
Re: Testen eines USB3.0-Drives - DISKSPEED
Einfache Möglichkeite: Stick ab- und neu anmelden,
bzw. Rechner neu starten. :stupid: Umbennenen hilft nix, da nicht die Datei selber, sondern die Cluster des Dateisystems gecachet werden und nur durch ändern eines Dateinamen ändert sich da nix. ![]() |
Re: Testen eines USB3.0-Drives - DISKSPEED
Hallo Hathor,
verwende doch einfach verschiedene Dateien, dann sollten ungecachte Werte rauskommen. Vielleicht einfach mal 100 x 100 MB Files mit zufälligem Inhalt erzeugen und die dann mal nur Lesen. Viele Grüße, Uwe |
Re: Testen eines USB3.0-Drives - DISKSPEED
Ich teste jetzt mal:
function WriteFile; external kernel32 name 'WriteFile'; function ReadFile; external kernel32 name 'ReadFile'; function FlushFileBuffers; external kernel32 name 'FlushFileBuffers'; FlushFileBuffers könnte DIE Lösung sein... |
Re: Testen eines USB3.0-Drives - DISKSPEED
FlushFileBuffers hilft nur beim Schreiben ... beim Lesen sollte es keine Veränderung geben,
da die Daten zwar auf die Platte geschrieben, aber nicht aus der Cache gelöscht werden. |
Re: Testen eines USB3.0-Drives - DISKSPEED
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe etwas (mit Sourcecode) gefunden, das funktioniert (nach einigen kleinen Änderungen...) - siehe Anhang:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:22 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