我已經找到this question告訴我的PerformanceCounter第一次出現的是0時總是返回0,所以我不得不多次調用它來獲得正確的結果。爲什麼我的PerformanceCounter路過櫃檯的方法
我,要很好地工作 - 它看起來像這樣:
public static float GetCpuUsage()
{
var cpuCounter = new PerformanceCounter();
cpuCounter.CategoryName = "Processor";
cpuCounter.CounterName = "% Processor Time";
cpuCounter.InstanceName = "_Total";
// Prime it
cpuCounter.NextValue();
Thread.Sleep(500);
return cpuCounter.NextValue();
}
不過,我希望能夠從一個以上的PerformanceCounter得到的結果,而無需等待每一個半秒。我這樣做是這樣的:
public static float GetCpuUsage(PerformanceCounter counter)
{
if (counter == null)
{
counter = new PerformanceCounter();
counter.CategoryName = "Processor";
counter.CounterName = "% Processor Time";
counter.InstanceName = "_Total";
}
return counter.NextValue();
}
我這樣稱呼它:
PerformanceCounter cpuCounter = null;
PerformanceCounter memoryCounter = null;
while (_isRunning)
{
result.Cpu = GetCpuUsage(cpuCounter);
result.Memory = GetAvailableMemory(memoryCounter);
// Process result
Thread.Sleep(500);
}
我認爲這是一個不錯的主意 - 每次路過專櫃的一樣實例的方法。
但是,它實際上並沒有工作,CPU始終爲0
它告訴我有一些基本的瞭解PerformanceCounters我不明白(這是不是在我聯繫到問題解決)。
究竟是什麼讓PerformanceCounter的工作?因爲在每個NextValue調用之間等待500毫秒似乎不是唯一的區別。