PerformanceCounter cpuload = new PerformanceCounter();
cpuload.CategoryName = "Processor";
cpuload.CounterName = "% Processor Time";
cpuload.InstanceName = "_Total";
Console.WriteLine(cpuload.NextValue() + "%");
输出始终为0%,而cpuload.RawValue
类似于736861484375左右,NextValue()
发生了什么?
答案 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() + "%");
然后你会看到一些数据出来。它可以在一个不变的图表或更新的场景中看到...这就是为什么你不经常遇到这个问题。
方法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);