Bestimmen einer maximalen Festplatte Datentransferrate des Computers programmatisch mit C #
-
01-10-2019 - |
Frage
Ich habe eine kleine WPF geschrieben Widget mit C #, dass Sie die aktuellen CPU-Aktivität, RAM verwendet und Plattenaktivität als drei kleinen Prozentsatz Typ Bars. Ich habe die folgenden Performancecounters hierfür verwendet: (diskCounter Performance gibt aktuelle Gesamtplattenaktivität in Bytes pro Sekunde)
private void InitialisePerformanceCounters()
{
cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total", true);
totalRam = (int)(new Microsoft.VisualBasic.Devices.ComputerInfo().TotalPhysicalMemory / 1024 / 1024);
ramCounter = new PerformanceCounter("Memory", "Available MBytes");
diskCounter = new PerformanceCounter("PhysicalDisk", "Disk Bytes/sec", "_Total", true);
}
Das Problem ist, dass, obwohl ich entdeckt habe, wie die gesamte verfügbare RAM erhält einen gebrauchten Prozentsatz von zu berechnen, kann ich nicht herausfinden, wie die maximale Datenübertragungsrate ‚theoretisch‘ der Festplatte zu lesen. Ich brauche diese verwendet, um den Prozentsatz der Plattenübertragungsrate zu berechnen. Jede Hilfe wäre sehr geschätzt.
Lösung
Der einzige Weg, dies zu tun wäre, es selbst zu testen. Man könnte so etwas wie dies zu Beginn der Anwendung tun:
byte[] data = new byte[1024];
string path = System.IO.Path.GetTempFileName();
int bytesPerSecond = 0;
using (System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.Create))
{
System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
watch.Start();
for (int i = 0; i < 1024; i++) fs.Write(data, 0, data.Length);
fs.Flush();
watch.Stop();
bytesPerSecond = (int)((data.Length * 1024) / watch.Elapsed.TotalSeconds);
}
System.IO.File.Delete(path);
Dies bedeutet, gehe aber davon aus, dass das Temp
Verzeichnis auf der Festplatte in Frage. Wenn nicht, werden Sie einen Pfad auf der Festplatte erstellen müssen messen möchten. Beachten Sie, dass dies die Messung Schreibgeschwindigkeit, nicht Lesegeschwindigkeit.
Dies ist etwas gekünstelt, da 1MB nicht viele Daten zu schreiben, aber man könnte es mit einer größeren Menge von Daten versuchen; das Konzept ist das gleiche.
Andere Tipps
Versuchen Sie verwenden WMI api, auch LINQ to WMI kann hilfreich sein.
Kenne ich jede mögliche Weise, nicht die maximale Datenübertragungsrate eines HD zu erhalten, aber mit WMI können Sie die intarface der Festplatte (USB, IDE ...) erhalten. Sie konnten die maximale Datenübertragungsrate der Schnittstelle und reffers Ihr Prozentsatz verwenden.
Auch ich werde hier einen Link zu einem kleinen Artikel verlassen über info frm die HD erhalten WMI verwenden, mit Quellcode. LINK