使用C#以编程方式确定计算机的最大硬盘数据传输速率

我使用C#编写了一个小的WPF小部件,它将当前的CPU活动,使用的RAM和磁盘活动显示为三个小百分比类型的条形图。 我已经使用了以下PerformanceCounters 🙁 diskCounter PerformanceCounter返回当前的总磁盘活动,以每秒字节数为单位)

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 to WMI 。

我不知道如何获得HD的最大数据传输速率,但使用WMI,您可以获得硬盘的接口(USB,IDE ……)。 您可以使用接口的最大数据传输速率,并将您的百分比添加到它。

另外,我将在这里留下一个关于使用WMI获取HD信息的小文章的源代码。 链接