PerformanceCounter в .NET, практичное применение
Начнем с главного.
Анализатор PerformanceCounter
Программа немного похожа на то, что несет в себе Server Explorer в Visual Studio (он тоже умеет разглядывать счетчики). Однако тут немного другой подход. Да, она выводит список счетчиков, но еще и генерирует подходящий код. Думаю, самое главное, это если пишется программа где подразумевается поддержка любой локализации винды, то лучше всего будет написать код который будет работать везде. Прикол со счетчиками, это то, что их название зависит от локализации винды. Так если счетчик «Процессор» выглядит в Русской винде, тогда «Processor» находится в Английской.

Скачать
Слежение за показателями счетчиков
Простой пример, сгенерирован программой:
// задать CultureInfo, которая даст понятие framework'у относительно локализации счетчиков
// если задать InvarientCulture (код 127), получатся английские надписи счетчиков
Thread.CurrentThread.CurrentCulture = new CultureInfo(1049);
// Счетчик производительности
using (PerformanceCounter pfc1 = new PerformanceCounter("Процессор", "% загруженности процессора", "_Total")) {
while (true) {
Console.WriteLine(pfc1.NextValue());
Thread.Sleep(1000);
}
}
Работая с одним проектам столкнулся с коварной проблемой. У клиента стоит Английская винда, а у меня — Русская. Естественно все понятия как «% загруженности процессора» сбиваются напрочь. Таскать конфигурационный файл с именами счетчиков с собой тоже не прихотливо. Позже выяснилось, что если задать иной CultureInfo текущему потоку (Thread.CurrentThread), то .NET сразу подстраивается под его стандарты. Это очевидно — меняются форматы даты/времени. Но что самое полезное, это меняются и имена счетчиков, на Английский. Удобнее всего будет иметь под рукой инструмент который и даст их названия если слезать с Русской локализации не хочется.
| Хозяйке на заметку |
На самом деле, связи имя=значение, которые винда перебирает при доступу к счетчикам находятся в реестре: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\. Там ты найдешь две подветви: 090 — английские наименования, и другая ветвь соответствует русским (или языку винды). У меня, например, 019. |
Приправа к Обеду
- Моя тема на Форуме программистов
- CultureInfo — национальные стандарты
- PerformanceCounter — счетчики