Практическое руководство. Получение списков счетчиков и категорий
Обновлен: Ноябрь 2007
Чтобы быстро извлечь список всех счетчиков или экземпляров в определенной категории, можно воспользоваться методом GetCounters класса PerformanceCounterCategory. Чтение системой всей категории и извлечение запрашиваемого счетчика выполняется каждый раз при запросе из категории значения путем создания экземпляра объекта PerformanceCounter, настройки его на существующий счетчик и получения значения счетчика. Это означает, что при запросе пяти различных счетчиков из категории, содержащей двадцать счетчиков, в системе выполняется пятикратное чтение всех содержащихся в категории двадцати счетчиков и отдельный поиск каждого счетчика. С помощью GetCounters те же самые данные могут быть получены после однократного чтения категории.
Метод GetCounters возвращает массив типа PerformanceCounter, содержащий имеющиеся в категории счетчики. Для работы с содержимым коллекции можно использовать свойство Item.
Помимо извлечения счетчиков, статический метод GetCategories можно использовать для получения списка категорий, присутствующих на данном компьютере или на любом сервере, к которому имеется доступ. GetCategories возвращает массив объектов PerformanceCounterCategory.
Извлечение счетчиков в категории
Создайте объект PerformanceCounter и настройте его так, чтобы он указывал на нужную категорию. Дополнительные сведения см. в разделе Практическое руководство. Создание экземпляров компонента PerformanceCounter или Практическое руководство. Настройка экземпляров компонента PerformanceCounter.
Создайте массив типа PerformanceCounter для хранения итогового списка категорий.
Вызовите метод GetCounters класса PerformanceCounterCategory и укажите нужную категорию в качестве параметра.
Сохраните результаты в массиве.
В следующем примере показан способ извлечения всех имеющихся в категории 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); } }
Извлечение всех имеющихся на компьютере категорий
Создайте массив типа PerformanceCounter для хранения итогового списка категорий.
Вызовите метод GetCategories класса PerformanceCounterCategory и укажите нужную категорию в качестве параметра.
Сохраните результаты в массиве.
В следующем коде показан способ извлечения всех имеющихся на локальном компьютере категорий. В коде предполагается, что ведется работа с приложением 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