2010-02-02 75 views
24
PerformanceCounter cpuload = new PerformanceCounter(); 
cpuload.CategoryName = "Processor"; 
cpuload.CounterName = "% Processor Time"; 
cpuload.InstanceName = "_Total"; 
Console.WriteLine(cpuload.NextValue() + "%"); 

輸出總是0%,而cpuload.RawValue就像736861484375左右,NextValue()發生了什麼?爲什麼CPU性能計數器不斷報告0%的CPU使用率?

回答

30

他計數器的第一次迭代將始終爲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 reference

方法nextValue()總是返回 第一個呼叫一個0值。所以你 必須調用這個方法第二個 時間。

13

首先檢索第一值(將是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);