6

我使用 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 总量来计算使用百分比,但我不知道如何读取磁盘的“理论”最大数据传输率。我需要这个来计算使用的磁盘传输率的百分比。任何帮助将不胜感激。

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

我不知道有什么方法可以获得HD的最大数据传输率,但是使用WMI可以获取硬盘的接口(USB,IDE ...)。您可以使用接口的最大数据传输率并将您的百分比提供给它。

另外,我将在此处留下一个链接,指向一篇关于使用 WMI 从 HD 获取信息的小文章,以及源代码。关联

于 2010-06-30T16:00:19.763 回答
1

尝试使用WMI api,LINQ to WMI也会有所帮助。

于 2010-06-30T15:51:00.050 回答