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.

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top