我有这段代码:
using (PerformanceCounter pfc = new PerformanceCounter("Processor", "% Processor Time", "_Total"))
return pfc.NextValue();
即使总CPU使用率不为零,此始终也会返回0,并且在性能监视器中查看时此相应的计数器也不为0.
为什么呢?如何简单地返回总CPU使用率我需要做什么?
这是Windows 8.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());
}