Почему счетчик производительности процессора продолжает сообщать об использовании процессора 0%? - PullRequest
30 голосов
/ 02 февраля 2010
PerformanceCounter cpuload = new PerformanceCounter();
cpuload.CategoryName = "Processor";
cpuload.CounterName = "% Processor Time";
cpuload.InstanceName = "_Total";
Console.WriteLine(cpuload.NextValue() + "%");

Выход всегда равен 0%, в то время как cpuload.RawValue похоже на 736861484375 или около того, что произошло в NextValue()?

Ответы [ 2 ]

41 голосов
/ 02 февраля 2010

Первая итерация счетчика всегда будет 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 при первом вызове.Таким образом, вы должны вызвать этот метод во второй раз.

20 голосов
/ 17 января 2011

Сначала получить первое значение (будет 0)

NextValue();

Тогда ждите 1000 милисек

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...