Распространенной проблемой при использовании счетчиков производительности Windows является желание создавать их «на лету» по мере необходимости, при каждом новом запуске создавая все счетчики, подходящие для этой версии кода.
Счетчики производительности Windows были разработаны и внедрены давно, очень давно и, как таковые, предназначены для регистрации во время какого-либо процесса установки. Тогда все программное обеспечение любой важности проходило процесс установки, инициированный пользователем, при первой установке и во время любых обновлений. Фактически, для регистрации категории счетчиков производительности и соответствующих ей счетчиков требуются довольно высокие привилегии (например, вы не можете сделать это в IIS с привилегиями по умолчанию). Система также не позволяет вносить изменения в счетчики на лету. Это имеет то преимущество, что клиенты могут запрашивать доступные счетчики и знать, что они не будут меняться во время их сбора (по крайней мере, во время выполнения соответствующего процесса). Если вы хотите что-то, что может динамически изменяться, вам придется свернуть свое собственное (это не так сложно, если вы не хотите, чтобы они отображались в мониторе производительности Windows).
Итак, правильное использование счетчиков производительности заключается в следующем: во время установки создать категорию счетчиков производительности и соответствующие счетчики:
PerformanceCounterCategory.Create ("My category", "Category Description", PerformanceCounterCategoryType.SingleInstance, counterCreationDataCollection /* <--premade, hardcoded list of counters */);
и во время обычного выполнения подключиться к категории счетчика производительности, ранее зарегистрированной с помощью Create
, как указано выше:
private static PerformanceCounterCategory _MyCategory = new PerformanceCounterCategory("My category"); // connect to the previously-registered performance counter category so we can set counter values
Конструктор, который принимает имя компьютера, должен действовать как клиент для сбора статистики с другого компьютера.
Также следует помнить, что существует ограничение на количество счетчиков производительности в вашей программе, и что для запроса значений также требуются специальные сетевые привилегии. Ограничение зависит от размера имен счетчиков и справки, а также от их значений, и их очень сложно изменить, поэтому вы, вероятно, захотите избежать этого (исходя из опыта, я могу сказать, что когда вы это делаете, различные счетчики после предел будет отображаться для всех имеют одинаковое значение). Несмотря на ограничения, они могут быть весьма полезны при многих обстоятельствах.