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

39
PerformanceCounter cpuload = new PerformanceCounter();
cpuload.CategoryName = "Processor";
cpuload.CounterName = "% Processor Time";
cpuload.InstanceName = "_Total";
Console.WriteLine(cpuload.NextValue() + "%");
输出始终为0%,而cpuload.RawValue却像736861484375一样,NextValue()发生了什么事情?
2个回答

54
第一次迭代计数器的值总是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值。所以你必须再调用一次这个方法。


25

首先获取第一个值(应该是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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接