Зачем вызывать NextValue () для объекта выброса ошибки PerformanceCounter? - PullRequest
1 голос
/ 05 марта 2012

Почему следующий код выдает ошибку Instance 'taskmgr' does not exist in the specified Category., когда я не передаю params в ctor

var cpuCounter = new PerformanceCounter();
cpuCounter.CategoryName = "Processor";
cpuCounter.CounterName = "% Processor Time";            
cpuCounter.InstanceName = "taskmgr";
cpuCounter.NextValue();

Но, когда я делаю то же самое, передавая params в ctor, ошибка не возникает.

var cpuCounter = new PerformanceCounter(
    "Processor",
    "% Processor Time",
    "taskmgr");
cpuCounter.NextValue();

ОБНОВЛЕНО: Я пробовал все имена процессов, а не только "taskmgr", и результат один и тот же!

В чем проблема?

Ответы [ 2 ]

1 голос
/ 05 марта 2012

Нет экземпляра taskmgr, доступного для категории Processor, потому что Processor относится к вашим процессорам ...

Вы, вероятно, имели в виду Process, который работает, как и ожидалось:

var cpuCounter = new PerformanceCounter();
cpuCounter.CategoryName = "Process";
cpuCounter.CounterName = "% Processor Time";            
cpuCounter.InstanceName = "taskmgr";
cpuCounter.NextValue();
0 голосов
/ 05 марта 2012

Вы уверены, что указали правильное значение для CategoryName / InstanceName?Из документации для InstanceName похоже, что имя экземпляра должно соответствовать значениям, доступным через оснастку MMC Performance Monitor, которая предоставляет только _Total и целочисленный индекс для процессора на моем компьютерепо крайней мере, при предоставлении "Processor".

Если вы предоставите "Process" для CategoryName, это позволит взглянуть на процесс.

...