为什么cpu性能计数器保持报告0%cpu使用率?

时间:2010-02-02 04:08:05

标签: c# cpu-usage performancecounter

PerformanceCounter cpuload = new PerformanceCounter();
cpuload.CategoryName = "Processor";
cpuload.CounterName = "% Processor Time";
cpuload.InstanceName = "_Total";
Console.WriteLine(cpuload.NextValue() + "%");

输出始终为0%,而cpuload.RawValue类似于736861484375左右,NextValue()发生了什么?

2 个答案:

答案 0 :(得分:41)

计数器的第一次迭代将始终为0,因为它无法与最后一个值进行比较。试试这个:

var cpuload = new PerformanceCounter("Processor", "% Processor Time", "_Total");
Console.WriteLine(cpuload.NextValue() + "%");
Console.WriteLine(cpuload.NextValue() + "%");
Console.WriteLine(cpuload.NextValue() + "%");
Console.WriteLine(cpuload.NextValue() + "%");
Console.WriteLine(cpuload.NextValue() + "%");

然后你会看到一些数据出来。它可以在一个不变的图表或更新的场景中看到...这就是为什么你不经常遇到这个问题。

这是MSDN reference

  

方法nextValue()总是返回   第一次通话时为0。那么你   不得不称这种方法为秒   时间。

答案 1 :(得分:20)

首先检索第一个值(将为0)

NextValue();

然后等待1000 milisec

Thread.Sleep(1000);

然后检索第二个值,即真正的cpu使用情况。

NextValue();

代码应如下所示:

float perfCounterValue = perfCounter.NextValue();

//Thread has to sleep for at least 1 sec for accurate value.
System.Threading.Thread.Sleep(1000);

perfCounterValue = perfCounter.NextValue();

Console.WriteLine("Value: {0}", perfCounterValue);