Datenträger Speedtest

ruNN0r

Erfahrenes Mitglied
Hallo,
ich versuche mich gerade daran einen Speedtest für einen Datenträger zu erstellen...
Ich schaffe es leider nicht so ganz...
Wie man Dateien bearbeiten kann, diese ausließt oder beschreibt ist mir bekannt. Jedoch möchte ich nun eine Datei auf die Festplatte schreiben (1GB) die keine relevanten Daten enthält. Einfach nur um zu sehen wie schnell die Daten auf die Platte geschrieben werden.

Dazu habe aktuell folgende Methode erstellt:

Code:
            long writed = 0;
            long to_write = 1 * 1024 * 1024 * 1024;
FileStream myFile = new FileStream(hdds[watch_id].Name + "speed.test", FileMode.Create);
                DateTime start = DateTime.Now;
                for (writed = 0; writed <= to_write; writed++)
                {
                    myFile.WriteByte(255);
                }
                messung = (DateTime.Now - start);
                myFile.Close();
                //Messergebnis ausgeben

Jedoch erhalte ich bei der Messung umgerechnet 78 MB/s Meine Platte schafft jedoch 180MB/s.
Die Frage ist nun woran liegt das?
Ich habe gemerkt dass es sich nicht um einen durchgehenden Stream handelt. Das beschreiben auf der Platte reißt zwischenzeitlich ab. So bekomme ich in einem Diagramm der Festplattenauslastung ein Dreiecksmuster. Ich denke dass ich wohl die Falsche klasse dafür verwende. Jedoch weiß ich mir keinen rat mehr.

Ich danke euch!
 
Hi

*.NET-Sprachen sind von Haus aus nicht die Schnellsten.
Für Speedtests eher C nehmen (CreateFile+SequentialFileAccess, oder wie das heißt...usw...)
Das allein sollte aber nicht so einen riesigen Unterschied bewirken.

*Pro write nur ein Byte zu schreiben ist nicht optimal.
Für jedes Byte Funktionsaufruf etc.etc.
Das wird zwar von OS etc. etwas entschärft, aber im Extremfall würde das
pro Byte einen ganzen Sektor auf die Festplatte schreiben.
Die können nur sektorweise. Größe pro Sektor zB. 512 Byte.
512 Byte geschrieben für 1 Byte Inhalt...
wie geasgt, wird durch das OS entdramatisiert.
Trotzdem dürften zB. 4096 Byte pro write schneller sein.

*Um wahre Ergebnisse zu bekommen, vor Testbeginn den Festplattencache ausschalten.
Kleinere Datenmengen (als 1GB) werden vom OS gern im RAM gehalten, weil schneller,
und dann bei Gelegenheit erst wirklich auf die Platte geschrieben.
Das könnte auch der Grund fürs Stocken sein. Cache voll, muss raus auf die langsamere Platte.

*Die max. Plattengeschwindigkeit könnte durch den Rest vom Computer verkleinert werden.
Muss ja alles zusammenarbeiten, und eventuell ist irgendwo etwas zu langsam.

*Vor Testbeginn am besten alle nicht wirklich nötigen Programme aus.
Vom Browser bis zum Indexdienst.

Gruß
 
Zurück