Счетчик производительности процессора

Чтобы создать приложение, которое будет отслеживать загрузку процессора и количество доступной оперативной памяти требуется всего несколько минут. Разработчики .NET Framework действительно постарались и включили замечательный компонент производительности Windows NT – PerfomanceCounter (продребнее здесь).

Разместим на форме Timer, 2 GroupBox, 3 Label, ProgressBar, 2 PrefomanceCounter (см. рис. 1)


Рис. 1 Расположение элементов на форме

Теперь выставим необходимые свойства наших элементов.

Таймер:
Interval1000
Enabletrue

ProgressBar:
MinimumValue0
MaximumValue100
Step1

Label я назвал как на рисунке (других настроек не нужно). GroupBox можете называть как хотите.

Тепер перейдем к настройке PrefomanceCounter. Один из компонентов будем использовать для получения значения загрузки процессора (рис. 2), второй – количество доступной оперативной памяти в килобайтах (рис. 3).


Рис. 2 Настройка PerfomanceCounter


Рис. 3 Настройка PerfomanceCounter

Выберите свойтво CategoryName после чего из списка выберите пункт Процессор (если у вас англ. язык то Processor). Теперь переходим к свойству CounterName. Так как в предыдущем шаге мы выбрали определенную категорию, то здесь нам будет предоставлен список подкатегорий. Выбираем % загруженности процессора (% Processor Time) и установим в свойстве InstanceName значение _Total. Если у вас в системе несколько процессоров, то выберите конкретный интересующий вас процессор.

Теперь перейдем к коду. Весь код будет выполняться в обработчике timer1_Tick:

private void timer1_Tick(object sender, EventArgs e)
{
   //загрузка процессора
   progressBar1.Value = (int)(pcProcessor.NextValue());
   lblProcessor.Text = "Загрузка процессора: " + progressBar1.Value.ToString() + "%";

   //количество доступной оперативной памяти
   lblMemoryAvailable.Text = ((int)pcMemoryAvailable.NextValue()).ToString();
}

Запустив программу, мы увидим текущую загрузку процессора и количество доступной оперативной памяти в КБ. Необходимо сказать, что у элемента PerfomanceCounter есть свойство MachineName которое позволяет получать значения не только с локальной машины, но и с удаленного компьютера.


Рис. 4 Результат выполнения программы

[download id=”4″]

2 Comments

  1. Отличная статья! Все доступно и понятно разобрано. Спасибо!

  2. Необработанное исключение типа “System.ArgumentOutOfRangeException” в System.Windows.Forms.dll

    Дополнительные сведения: Значение ‘1547372’ недопустимо для ‘Value’. ‘Value’ должно лежать в диапазоне от ‘minimum’ до ‘maximum’.

    Обьяснил…

Comments are closed.