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


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

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

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

Метод GetCounters возвращает массив типа PerformanceCounter, содержащий имеющиеся в категории счетчики. Для работы с содержимым коллекции можно использовать свойство Item.

Помимо извлечения счетчиков, статический метод GetCategories можно использовать для получения списка категорий, присутствующих на данном компьютере или на любом сервере, к которому имеется доступ. GetCategories возвращает массив объектов PerformanceCounterCategory.

Извлечение счетчиков в категории

  1. Создайте объект PerformanceCounter и настройте его так, чтобы он указывал на нужную категорию. Дополнительные сведения см. в разделе Практическое руководство. Создание экземпляров компонента PerformanceCounter или Практическое руководство. Настройка экземпляров компонента PerformanceCounter.

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

  3. Вызовите метод GetCounters класса PerformanceCounterCategory и укажите нужную категорию в качестве параметра.

  4. Сохраните результаты в массиве.

    В следующем примере показан способ извлечения всех имеющихся в категории Cache счетчиков. В коде предполагается, что ведется работа с приложением Windows Forms, имеющим кнопку и элемент управления ListBox. Кроме того, предполагается, что имеется ссылка на System.dll и оператор Imports (для Visual Basic) или оператор using (для C#) для пространства имен System.Diagnostics:

    Private Sub btnGetCounters_Click(ByVal sender As System.Object, _
       ByVal e As System.EventArgs) Handles btnGetCounters.Click
       Dim mypc() As PerformanceCounter
       Dim i As Integer
       Dim myCat As New PerformanceCounterCategory("Cache")
       ' Remove the current contents of the list.
       Me.ListBox1.Items.Clear()
       ' Retrieve the counters.
       mypc = myCat.GetCounters
       ' Add the retrieved counters to the list.
       For i = 0 To mypc.Length - 1
          Me.ListBox1.Items.Add(mypc(i).CounterName)
       Next
    End Sub
    
     private void btnGetCounters_Click(object sender, EventArgs e)
        {
            System.Diagnostics.PerformanceCounter[] mypc;
            System.Diagnostics.PerformanceCounterCategory mycat =
               new System.Diagnostics.PerformanceCounterCategory("cache");
            // Remove the current contents of the list.
            this.listBox1.Items.Clear();
            // Retrieve the counters.
            mypc = mycat.GetCounters();
            // Add the retrieved counters to the list.
            for (int i = 0; i < mypc.Length; i++)
            {
                this.listBox1.Items.Add(mypc[i].CounterName);
            }
        }
    

Извлечение всех имеющихся на компьютере категорий

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

  2. Вызовите метод GetCategories класса PerformanceCounterCategory и укажите нужную категорию в качестве параметра.

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

    В следующем коде показан способ извлечения всех имеющихся на локальном компьютере категорий. В коде предполагается, что ведется работа с приложением Windows Forms, имеющим кнопку и элемент управления ListBox. Кроме того, предполагается, что имеется ссылка на System.dll и оператор Imports (для Visual Basic) или оператор using (для C#) для пространства имен System.Diagnostics:

    Private Sub btnGetCategories_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs)
       Dim myCat2 As PerformanceCounterCategory()
       Dim i As Integer
       ' Clear the contents of the list box.
       Me.listBox2.Items.Clear()
       ' Retrieve the categories.
       myCat2 = PerformanceCounterCategory.GetCategories
       ' Add the retrieved categories to the list.
       For i = 0 To myCat2.Length - 1
          Me.listBox2.Items.Add(myCat2(i).CategoryName)
       Next
    End Sub
    
     private void btnGetCategories_Click(object sender, EventArgs e)
        {
            System.Diagnostics.PerformanceCounterCategory[] myCat2;
            // Clear the list's current contents.
            this.listBox2.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.listBox2.Items.Add(myCat2[i].CategoryName);
            }
        }
    

См. также

Задачи

Практическое руководство. Создание экземпляров компонента PerformanceCounter

Практическое руководство. Настройка экземпляров компонента PerformanceCounter

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

Получение значений счетчика производительности