DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

パフォーマンスカウンタのカテゴリ、カウンタの一覧を取得する

あるコンピュータに登録されているパフォーマンスカウンタのカテゴリ一覧を取得するには、PerformanceCounterCategory.GetCategoriesメソッドを使用します。また、あるパフォーマンスカウンタカテゴリのカウンタ一覧を取得するには、PerformanceCounterCategory.GetCountersメソッドを使用します。

なおWindows Vista以降でUACが有効になっている時は、管理者に昇格しないと失敗するかもしれません。この対処法については、「Vista以降でUACが有効だとファイルの作成等に失敗する問題の対処法」をご覧ください。

以下に、ローカルコンピュータに登録されているパフォーマンスカウンタのカテゴリ一覧と、カウンタ一覧を取得し、その名前を表示する例を示します。

VB.NET
コードを隠すコードを選択
'ローカルコンピュータに登録されている
'パフォーマンスカウンタカテゴリ一覧を取得する
Dim pccs As System.Diagnostics.PerformanceCounterCategory() = _
    System.Diagnostics.PerformanceCounterCategory.GetCategories()
'次のようにしてコンピュータ名を指定することもできる
'pccs = PerformanceCounterCategory.GetCategories("MyComputer")
Dim pcc As System.Diagnostics.PerformanceCounterCategory

For Each pcc In  pccs
    'カテゴリのパフォーマンスオブジェクト名を表示する
    Console.WriteLine(pcc.CategoryName)
    
    Try
        'カテゴリのパフォーマンスオブジェクトインスタンス一覧を取得
        'インスタンス情報が無い時はInvalidOperationExceptionがスロー
        Dim instanceNames As String() = pcc.GetInstanceNames()
        
        'インスタンス名を表示する
        Dim instanceName As String
        For Each instanceName In  instanceNames
         Console.WriteLine("INSTANCE:" + instanceName)
        Next instanceName
        
        'カテゴリのカウンタ一覧を取得
        Dim pcs() As System.Diagnostics.PerformanceCounter
        If instanceNames.Length > 0 Then
            pcs = pcc.GetCounters(instanceNames(0))
        Else
            pcs = pcc.GetCounters()
        End If
        
        'パフォーマンスカウンタ名を表示する
        Dim pc As System.Diagnostics.PerformanceCounter
        For Each pc In  pcs
            Console.WriteLine(">" + pc.CounterName)
        Next pc
    Catch ex As InvalidOperationException
        Console.WriteLine("インスタンス情報がありません")
    End Try
Next pcc
C#
コードを隠すコードを選択
//ローカルコンピュータに登録されている
//パフォーマンスカウンタカテゴリ一覧を取得する
System.Diagnostics.PerformanceCounterCategory[] pccs =
    System.Diagnostics.PerformanceCounterCategory.GetCategories();
//次のようにしてコンピュータ名を指定することもできる
//pccs = PerformanceCounterCategory.GetCategories("MyComputer");

foreach (System.Diagnostics.PerformanceCounterCategory pcc in pccs)
{
    //カテゴリのパフォーマンスオブジェクト名を表示する
    Console.WriteLine(pcc.CategoryName);

    try
    {
        //カテゴリのパフォーマンスオブジェクトインスタンス一覧を取得
        //インスタンス情報が無い時はInvalidOperationExceptionがスロー
        string[] instanceNames = pcc.GetInstanceNames();
        //インスタンス名を表示する
        foreach (string instanceName in instanceNames)
        {
            Console.WriteLine("INSTANCE:" + instanceName);
        }

        //カテゴリのカウンタ一覧を取得
        System.Diagnostics.PerformanceCounter[] pcs;
        if (instanceNames.Length > 0)
            pcs = pcc.GetCounters(instanceNames[0]);
        else
            pcs = pcc.GetCounters();

        //パフォーマンスカウンタ名を表示する
        foreach (System.Diagnostics.PerformanceCounter pc in pcs)
        {
            Console.WriteLine(">" + pc.CounterName);
        }
    }
    catch (InvalidOperationException)
    {
        Console.WriteLine("インスタンス情報がありません");
    }
}
  • 履歴:
  • 2014/1/7 UACに関する記述を追加。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。