PerformanceCounter CPU使用值总是0

时间:2017-05-31 09:23:38

标签: c# performance

对于以下性能计数器,我总是得到%处理器时间为0,即使我的CPU显示100%使用率,可能是什么原因?

PerformanceCounter pc = new PerformanceCounter("Processor", "% Processor Time", "_Total", true);
Console.WriteLine(pc.NextValue());

2 个答案:

答案 0 :(得分:5)

NextValue() documentation

中的评论解释了这一点
  

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

因此,如果您将代码更改为:

while (true)
{
    Console.WriteLine(pc.NextValue());
    Thread.Sleep(1000);
}

...然后你会看到合适的价值。

答案 1 :(得分:2)

如果您尝试直接读取总时间,则总是得到0,原因是PerformanceCounter对象需要2个值才能给出准确的读数。

下面的方法返回一个int,表示当时CPU使用率的准确百分比。

while (true)
{
    PerformanceCounter cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");
    float tempValue = cpuCounter.NextValue();
    Thread.Sleep(1000);
    Console.WriteLine(cpuCounter.NextValue());
}