我使用以下代码来确定计算机的总 CPU 使用率。
private int getCPUUsage()
{
PerformanceCounter cnt = new PerformanceCounter("Processor", "% Processor Time", "_Total");
return (int)cnt.NextValue();
}
但是,任务管理器的CPU使用率在20%左右,但是函数的输出值大多是0,有时是100。
奇怪的是,当我在函数中间放一个MessageBox时,MessageBox的值是错误的,但返回值是正确的。
private int getCPUUsage()
{
PerformanceCounter cnt = new PerformanceCounter("Processor", "% Processor Time", "_Total");
MessageBox.Show(cnt.NextValue().ToString()); //Just 0
return (int)cnt.NextValue(); //Right Value
}
所以我运行了cnt.NextValue()
两次而不是MessageBox
,但结果与原始代码相同。
如何PerformanceCounter
正常获取的 CPU 使用率?
第一个值将始终为 0,因为没有什么可比较的。
您必须多次运行它才能进行比较。从MSDN:
如果计数器的计算值取决于两次计数器读取,则第一次读取操作返回 0.0。重置性能计数器属性以指定不同的计数器相当于创建一个新的性能计数器,使用新属性的第一次读取操作返回 0.0。建议在调用 NextValue 方法之间的延迟时间为一秒,以允许计数器执行下一次增量读取。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句