C#でプログラムでコンピューターの最大ハードドライブデータ転送レートを決定する

StackOverflow https://stackoverflow.com/questions/3150956

質問

現在のCPUアクティビティ、RAM使用、およびディスクアクティビティを3つの小さなタイプのバーとして表示するC#を使用して、小さなWPFウィジェットを作成しました。これには、次のパフォーマンスカウンターを使用しました。

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の合計を取得して使用済みの割合を計算する方法を発見したが、ディスクの「理論的な」最大データ転送速度を読む方法を見つけることができないことです。これが使用されるディスク転送率の割合を計算するために必要です。どんな助けも大歓迎です。

役に立ちましたか?

解決

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

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は書くべきデータではないため、これはやや不自然ですが、より多くのデータで試してみることができます。コンセプトは同じです。

他のヒント

使用してみてください WMI APIも linqからwmi 役立つことがあります。

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top