6

C#を使用して、現在のCPUアクティビティ、使用されているRAM、およびディスクアクティビティを3つの小さなパーセンテージタイプのバーとして表示する小さなWPFウィジェットを作成しました。これには次のPerformanceCountersを使用しました:(diskCounterPerformanceCounterは、現在の合計ディスクアクティビティを1秒あたりのバイト数で返します)

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);
}

問題は、使用可能なパーセンテージを計算するために使用可能なRAMの合計を取得する方法を発見したにもかかわらず、ディスクの「理論上の」最大データ転送速度を読み取る方法を見つけることができないことです。使用されるディスク転送速度のパーセンテージを計算するためにこれが必要です。どんな助けでも大歓迎です。

4

3 に答える 3

3

これを行う唯一の方法は、自分でテストすることです。アプリケーションの開始時に、次のようなことを行うことができます。

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);

Tempただし、これは、ディレクトリが問題のディスク上にあることを前提としています。そうでない場合は、測定するディスク上にパスを作成する必要があります。これは読み取り速度ではなく、書き込み速度を測定していることに注意してください。

1MBは書き込むデータが少ないため、これは多少工夫されていますが、大量のデータで試すことができます。コンセプトは同じです。

于 2010-06-30T15:56:01.187 に答える
1

WMI APIを使用してみてください。また、 LINQtoWMIが役立つ場合があります。

于 2010-06-30T15:51:00.050 に答える
1

HDの最大データ転送速度を取得する方法はわかりませんが、WMIを使用すると、ハードディスク(USB、IDE ...)のインターフェイスを取得できます。インターフェイスの最大データ転送速度を使用して、そのパーセンテージを参照することができます。

また、ソースコードを使用してWMIを使用してHDから情報を取得する方法に関する小さな記事へのリンクをここに残します。リンク

于 2010-06-30T16:00:19.763 に答える