Поделиться через


Пошаговое руководство. Получение категорий и счетчиков

Обновлен: Ноябрь 2007

В этом пошаговом руководстве описывается процесс создания и настройки экземпляров компонента PerformanceCounter, а также их использование для получения списков имеющихся в системе категорий счетчиков производительности и самих этих счетчиков. С помощью счетчиков производительности в Windows производится сбор сведений о производительности различных системных ресурсов. В Windows можно работать с рядом предопределенных счетчиков, сгруппированных в категории. Все счетчики и категории относится к конкретным областям функциональности системы.

В этом пошаговом руководстве:

  • Создается экземпляр компонента PerformanceCounter и проводится его настройка для взаимодействия с определенной категорией создаваемых системой счетчиков.

  • Создается приложение Windows, выводящее список сведений о категориях и счетчиках.

  • Используется метод GetCategories, возвращающий список категорий, имеющихся на локальном компьютере.

  • Используется метод GetCounters, возвращающий список счетчиков из указанной категории.

Создание приложения Windows

  1. В диалоговом окне Новый проект создайте Приложение Windows на языке Visual Basic, Visual C# или Visual J#.

  2. Добавьте в форму две кнопки и два списка с вкладки Windows Formsпанели элементов. Расположите их в произвольном порядке и задайте для них следующие свойства:

    Элемент управления

    Свойство

    Значение

    Button1

    Name

    btnGetCounters

     

    Text

    Получить список счетчиков

    Button2

    Name

    btnGetCategories

     

    Text

    Получить список категорий

    ListBox1

    Name

    lstCounters

     

    ScrollAlwaysVisible

    True

    ListBox2

    Name

    lstCategories

     

    ScrollAlwaysVisible

    True

  3. Сохраните результаты работы.

Получение списка категорий

  1. В режиме разработки дважды щелкните кнопку Получить список категорий для перехода в редактор кода.

  2. В версии Visual J# добавьте вверху экрана оператор import, ссылающийся на пространство имен System.Diagnostics.

  3. Добавьте в процедуру btnGetCategories_Click следующий код, получающий список категорий на локальном компьютере:

    Private Sub btnGetCategories_Click(ByVal sender As System.Object, _
       ByVal e As System.EventArgs) Handles btnGetCategories.Click
    
       Dim myCat2 As PerformanceCounterCategory()
       Dim i As Integer
       ' Remove the current contents of the list.
       Me.lstCategories.Items.Clear()
       ' Retrieve the categories.
       myCat2 = PerformanceCounterCategory.GetCategories
       ' Add the retrieved categories to the list.
       For i = 0 To myCat2.Length - 1
          Me.lstCategories.Items.Add(myCat2(i).CategoryName)
       Next
    End Sub
    
    private void btnGetCategories_Click(object sender, System.EventArgs e)
    {
       System.Diagnostics.PerformanceCounterCategory[] myCat2;
       // Remove the current contents of the list.
       this.lstCategories.Items.Clear();
       // Retrieve the categories.
       myCat2 = 
          System.Diagnostics.PerformanceCounterCategory.GetCategories();
       // Add the retrieved categories to the list.
       for (int i = 0; i < myCat2.Length; i++) 
       {
          this.lstCategories.Items.Add(myCat2[i].CategoryName);
       }
    }
    

Получение списка счетчиков

  1. В Режиме разработки дважды щелкните кнопку Получить список счетчиков для перехода в редактор кода. Курсор переместится в событие btnGetCounters_Click.

  2. Добавьте следующий код, получающий список счетчиков выбранной категории:

    Private Sub btnGetCounters_Click(ByVal sender As System.Object, _
       ByVal e As System.EventArgs) Handles btnGetCounters.Click
    
       Dim instanceNames() As String
       Dim counters As New System.Collections.ArrayList()
    
       If (Me.lstCategories.SelectedIndex <> -1) Then
          Dim mycat As New PerformanceCounterCategory( _
             Me.lstCategories.SelectedItem.ToString())
          ' Remove the current contents of the list.
          Me.lstCounters.Items.Clear()
          ' Retrieve the counters.
          Try
             instanceNames = mycat.GetInstanceNames()
             If (instanceNames.Length = 0) Then
                counters.AddRange(mycat.GetCounters())
             Else
                Dim i As Integer
                For i = 0 To instanceNames.Length - 1
                   counters.AddRange( _
                      mycat.GetCounters(instanceNames(i)))
                Next
             End If
             ' Add the retrieved counters to the list.
             Dim counter As PerformanceCounter
             For Each counter In counters
                Me.lstCounters.Items.Add(counter.CounterName)
             Next
          Catch ex As Exception
             MessageBox.Show( _
                "Unable to list the counters for this category:" _
                & ControlChars.CrLf & ex.Message)
          End Try
       End If
    End Sub
    
    private void btnGetCounters_Click(object sender, System.EventArgs e)
    {
       string[] instanceNames;
       System.Collections.ArrayList counters = new 
          System.Collections.ArrayList();
       if (this.lstCategories.SelectedIndex != -1) 
       {
          System.Diagnostics.PerformanceCounterCategory mycat = new 
             System.Diagnostics.PerformanceCounterCategory(
             this.lstCategories.SelectedItem.ToString());
          // Remove the current contents of the list.
          this.lstCounters.Items.Clear();
          // Retrieve the counters.
          try 
          {
             instanceNames = mycat.GetInstanceNames();
             if (instanceNames.Length == 0) 
             {
                counters.AddRange(mycat.GetCounters());
             }
             else
             {
                for (int i = 0; i < instanceNames.Length; i++)
                {
                   counters.AddRange(mycat.GetCounters(instanceNames[i]));
                }
             }
    
             // Add the retrieved counters to the list.
             foreach (System.Diagnostics.PerformanceCounter counter 
                in counters) 
             {
                this.lstCounters.Items.Add(counter.CounterName);
             }
          }
          catch (System.Exception ex)
          {
             MessageBox.Show(
                "Unable to list the counters for this category:\n" 
                + ex.Message);
          }
       }
    }
    

Тестирование приложения

  1. Сохраните и скомпилируйте приложение.

  2. Нажмите кнопку Получить список категорий. Категории будут перечислены в списке.

  3. Выберите одну из них и нажмите кнопку Получить список счетчиков. Появится список счетчиков выбранной категории.

См. также

Основные понятия

Знакомство со способами выявления пороговых значений производительности

Другие ресурсы

Выявление пороговых значений производительности

Примеры использования счетчиков производительности