對於以下性能計數器,我總是得到%處理器時間爲0,即使我的CPU顯示100%的使用率,可能是什麼原因?PerformanceCounter CPU使用率值allways 0
PerformanceCounter pc = new PerformanceCounter("Processor", "% Processor Time", "_Total", true);
Console.WriteLine(pc.NextValue());
對於以下性能計數器,我總是得到%處理器時間爲0,即使我的CPU顯示100%的使用率,可能是什麼原因?PerformanceCounter CPU使用率值allways 0
PerformanceCounter pc = new PerformanceCounter("Processor", "% Processor Time", "_Total", true);
Console.WriteLine(pc.NextValue());
它是由言論在NextValue()
documentation解釋說:
如果計數器的計算值取決於兩個計數器讀,第一次讀操作返回0.0。重置性能計數器屬性以指定不同的計數器相當於創建新的性能計數器,並且使用新屬性的第一個讀取操作返回0.0。建議的NextValue方法調用之間的延遲時間爲1秒,以允許計數器執行下一次增量讀取。
所以,如果你改變你的代碼是這樣的:
while (true)
{
Console.WriteLine(pc.NextValue());
Thread.Sleep(1000);
}
...然後你會看到相應的值。
如果您嘗試直接讀取總時間,您將始終得到0,原因是PerformanceCounter對象需要2個值才能提供準確的讀數。
以下方法返回一個int值,表示當時CPU使用率的精確百分比。
while (true)
{
PerformanceCounter cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");
float tempValue = cpuCounter.NextValue();
Thread.Sleep(1000);
Console.WriteLine(cpuCounter.NextValue());
}
這個答案和Jon Skeet的有什麼不同? – Pikoh
兩個答案同樣正確。唯一不同的是,我有點遲遲不回覆。 – shilpesh