为什么CPU性能计数器不断报告0%的CPU使用率?

这是我的代码片段:

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

但输出总是0%,而cpuload.RawValue就像736861484375左右,NextValue()发生了什么? 我的CPU显然是0%的使用率。

谢谢你们〜8 ^)

他计数器的第一个迭代将始终为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的参考资料 :

nextValue()方法在第一次调用时总是返回一个0值。 所以你必须再次调用这个方法。

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

 NextValue(); 

然后等待1000毫秒

 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);