チュートリアル : カテゴリおよびカウンタの取得
更新 : 2007 年 11 月
このチュートリアルでは、PerformanceCounter コンポーネントのインスタンスを作成して構成し、そのインスタンスを使って、システムのパフォーマンス カウンタ カテゴリのリストとカウンタのリストを取得するプロセスについて説明します。パフォーマンス カウンタとは、Windows が各種のシステム リソースに関するパフォーマンス データを収集する手段です。Windows には、複数のカテゴリに分けられた定義済みのカウンタのセットがあり、アプリケーションからアクセスできます。各カテゴリおよびカウンタは、システムの機能の特定領域に関連しています。
このチュートリアルでは、次の作業を行います。
PerformanceCounter コンポーネントをインスタンス化し、システムによって生成された特定のカテゴリのカウンタとやり取りするように設定します。
カテゴリおよびカウンタに関する情報をリスト ボックスに表示する Windows アプリケーションを作成します。
GetCategories メソッドを使用して、ローカル コンピュータ上のカテゴリのリストを返します。
GetCounters メソッドを使用して、指定したカテゴリのカウンタのリストを返します。
Windows アプリケーションを作成するには
[新しいプロジェクト] ダイアログ ボックスで、Visual Basic、Visual C#、または Visual J# の Windows アプリケーションを作成します。
ツールボックス の [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
作業内容を保存します。
カテゴリのリストを取得するには
[デザイン] ビューで、[Get Categories] をダブルクリックしてコード エディタにアクセスします。
Visual J# バージョンでは、画面の上部に、System.Diagnostics 名前空間を参照する import ステートメントを追加します。
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); } }
カウンタのリストを取得するには
[デザイン] ビューで、[Get Counters] をダブルクリックしてコード エディタにアクセスします。カーソルが btnGetCounters_Click イベントに配置されます。
選択されたカテゴリからカウンタのリストを取得するために、次のコードを追加します。
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); } } }
アプリケーションをテストするには
アプリケーションを保存し、コンパイルします。
[Get Categories] をクリックします。カテゴリの一覧がリスト ボックスに表示されます。
カテゴリの 1 つをクリックし、[Get Counters] をクリックします。選択したカテゴリに属するカウンタの一覧が表示されます。