我使用以下代码来确定计算机的总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 :(得分:3)
第一个值将始终为0,因为无法比较。
您必须多次运行才能进行比较。来自MSDN:
如果计数器的计算值取决于两个计数器读数,则 第一次读取操作返回0.0。重置性能计数器 指定不同计数器的属性相当于创建一个 新的性能计数器,以及使用新的第一个读取操作 属性返回0.0。呼叫之间建议的延迟时间 NextValue方法是一秒钟,以允许计数器执行 下一次增量阅读。