次の方法で共有


チュートリアル : カテゴリおよびカウンタの取得

更新 : 2007 年 11 月

このチュートリアルでは、PerformanceCounter コンポーネントのインスタンスを作成して構成し、そのインスタンスを使って、システムのパフォーマンス カウンタ カテゴリのリストとカウンタのリストを取得するプロセスについて説明します。パフォーマンス カウンタとは、Windows が各種のシステム リソースに関するパフォーマンス データを収集する手段です。Windows には、複数のカテゴリに分けられた定義済みのカウンタのセットがあり、アプリケーションからアクセスできます。各カテゴリおよびカウンタは、システムの機能の特定領域に関連しています。

このチュートリアルでは、次の作業を行います。

  • PerformanceCounter コンポーネントをインスタンス化し、システムによって生成された特定のカテゴリのカウンタとやり取りするように設定します。

  • カテゴリおよびカウンタに関する情報をリスト ボックスに表示する Windows アプリケーションを作成します。

  • GetCategories メソッドを使用して、ローカル コンピュータ上のカテゴリのリストを返します。

  • GetCounters メソッドを使用して、指定したカテゴリのカウンタのリストを返します。

Windows アプリケーションを作成するには

  1. [新しいプロジェクト] ダイアログ ボックスで、Visual Basic、Visual C#、または Visual J# の Windows アプリケーションを作成します。

  2. ツールボックス の [Windows フォーム] タブから、2 つのボタンと 2 つのリスト ボックスをフォームに追加します。追加したボタンとリスト ボックスを適当な順序で配置し、以下のプロパティを設定します。

    コントロール

    プロパティ

    Button1

    Name

    btnGetCounters

     

    Text

    Get Counters

    Button2

    Name

    btnGetCategories

     

    Text

    Get Categories

    ListBox1

    Name

    lstCounters

     

    ScrollAlwaysVisible

    True

    ListBox2

    Name

    lstCategories

     

    ScrollAlwaysVisible

    True

  3. 作業内容を保存します。

カテゴリのリストを取得するには

  1. [デザイン] ビューで、[Get Categories] をダブルクリックしてコード エディタにアクセスします。

  2. Visual J# バージョンでは、画面の上部に、System.Diagnostics 名前空間を参照する import ステートメントを追加します。

  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. [デザイン] ビューで、[Get Counters] をダブルクリックしてコード エディタにアクセスします。カーソルが 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. [Get Categories] をクリックします。カテゴリの一覧がリスト ボックスに表示されます。

  3. カテゴリの 1 つをクリックし、[Get Counters] をクリックします。選択したカテゴリに属するカウンタの一覧が表示されます。

参照

概念

パフォーマンスしきい値の監視の概要

その他の技術情報

パフォーマンスしきい値の監視

パフォーマンス カウンタに関するチュートリアル