为什么这个性能计数器总是返回零?

时间:2014-01-29 01:13:10

标签: c#

我有这段代码:

using (PerformanceCounter pfc = new PerformanceCounter("Processor", "% Processor Time", "_Total"))    
    return pfc.NextValue();

即使总CPU使用率不为零,此始终也会返回0,并且在性能监视器中查看时此相应的计数器也不为0.

为什么呢?如何简单地返回总CPU使用率我需要做什么?

这是Windows 8.1虚拟机。

1 个答案:

答案 0 :(得分:6)

来自MSDN

  

如果计数器的计算值取决于两个计数器读数,则第一个读取操作返回0.0。重置性能计数器属性以指定其他计数器等效于创建新的性能计数器,使用新属性的第一个读取操作返回0.0。调用NextValue方法之间建议的延迟时间是一秒,以允许计数器执行下一次增量读取。

因此,我会说“%Processor Time”计数器的计算值取决于两个计数器读数,因此根据文档,您看到的第一个是0.0。

我使用他们在读取之间等待一秒的建议来测试它。我在第一次阅读时每次都获得0.0,但之后是正值。

using (PerformanceCounter pfc = new PerformanceCounter("Processor", "% Processor Time", "_Total"))
{
    MessageBox.Show(pfc.NextValue().ToString());
    Thread.Sleep(1000);
    MessageBox.Show(pfc.NextValue().ToString());
    Thread.Sleep(1000);
    MessageBox.Show(pfc.NextValue().ToString());
}