Подтвердить что ты не робот

Почему счетчик производительности процессора постоянно сообщал об использовании 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()?

4b9b3361

Ответ 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);