C#でプログラムでコンピューターの最大ハードドライブデータ転送レートを決定する
-
01-10-2019 - |
質問
現在の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は書くべきデータではないため、これはやや不自然ですが、より多くのデータで試してみることができます。コンセプトは同じです。
所属していません StackOverflow