Почему счетчик производительности процессора постоянно сообщал об использовании 0% CPU?
PerformanceCounter cpuload = new PerformanceCounter();
cpuload.CategoryName = "Processor";
cpuload.CounterName = "% Processor Time";
cpuload.InstanceName = "_Total";
Console.WriteLine(cpuload.NextValue() + "%");
Выход всегда равен 0%, а cpuload.RawValue
- как 736861484375 или около того, что произошло при NextValue()
?
Ответы
Ответ 1
Первая итерация счетчика всегда будет 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:
Метод nextValue() всегда возвращает значение 0 при первом вызове. Так что вы должен вызвать этот метод вторым время.
Ответ 2
Сначала получить первое значение (будет 0)
NextValue();
Затем подождите 1000 milisec
Thread.Sleep(1000);
Затем извлекается второе значение, которое является истинным использованием процессора.
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);