C#でパフォーマンスカウンターを操作する方法

Windowsは、現在実行中のスレッド、CLRメモリなどを追跡することにより、システムで実行されているプロセスとサービスを監視します。多くの場合、コンピューターシステムまたはそれらで実行されているアプリケーションのパフォーマンスを測定する必要があります。システム内のリソース消費、システム上で実行されているサービス、システムに接続されているデバイスのパフォーマンスなどのメトリックに。

パフォーマンスカウンター(デフォルトで提供される機能)を使用すると、システムまたはシステム全体で実行されている1つ以上のアプリケーションまたはサービスに関連するパフォーマンスデータをキャプチャ、公開、および分析できます。

アプリケーションを構築する際、パフォーマンス(一定期間のリソース消費または使用量)を監視し、パフォーマンスデータを使用してアプリケーションのボトルネックを特定する必要がある場合があります。ここで、パフォーマンスカウンターが役立ちます。COMベースのMicrosoftテクノロジであるWMI(Windows Management Instrumentation)を使用してこれらの詳細を取得することもできますが、パフォーマンスカウンターを使用すると、実行時にシステムのリソース消費量の統計をリアルタイムで取得できます。

パフォーマンスモニター(Windows OSでデフォルトで提供されるツール)スナップインを使用して、パフォーマンスデータをリアルタイムで表示できます。このツールを開始するには、[スタート]メニューをクリックし、[ファイル名を指定して実行]をクリックします。次に、「perfmon」と入力してEnterキーを押します。

カスタムパフォーマンスカウンター

カスタムパフォーマンスカウンターの作成は簡単です。サーバーエクスプローラーを使用してパフォーマンスカウンターを作成できます。最初にパフォーマンスカウンターカテゴリを作成してから、そのカテゴリの一部として1つ以上のカウンターを作成する必要があります。

プログラムでパフォーマンスカウンターを操作するには、System.Diagnostics.PerformanceCounterクラスを使用できます。PerformanceCounterクラスのインスタンスを作成してから、CategoryName、CounterName、MachineName、およびReadOnlyの各プロパティに必要な値を指定する必要があります。

カスタムパフォーマンスカウンターカテゴリを作成するには、PerformanceCounterCategoryクラスのCreateメソッドを利用する必要があります。例として、次のコードスニペットを使用して、カスタムパフォーマンスカウンターカテゴリを作成できます。

PerformanceCounterCategory.Create("CustomPerformanceCounterCategoryName", "CustomPerformanceCounterHelp", PerformanceCounterCategoryType.MultiInstance,

"CustomPerformanceCounterName", "CustomPerformanceCounterHelp");

次のコードスニペットは、使用可能なすべてのパフォーマンスカウンターカテゴリを表示する方法を示しています。

static void Main()

    {

        var performanceCounterCategories = PerformanceCounterCategory.GetCategories();

        foreach(PerformanceCounterCategory performanceCounterCategory in performanceCounterCategories)

        {

         Console.WriteLine(performanceCounterCategory.CategoryName);

        }

        Console.Read();

    }

次のコードスニペットは、カテゴリ「プロセッサ」に属するパフォーマンスカウンタを取得する方法を示しています。

var performanceCounterCategories = PerformanceCounterCategory.GetCategories()

     .FirstOrDefault(category => category.CategoryName == "Processor");

var performanceCounters = performanceCounterCategories.GetCounters("_Total");

特定のカテゴリに属する​​パフォーマンスカウンターを読み取るには、PerformanceCounterクラスを使用する必要があります。PerformanceCounterクラスはSystem.Diagnostics名前空間で使用できることに注意してください。これは、「プロセッサー」カテゴリーに属するすべてのパフォーマンスカウンターのパフォーマンスカウンター名を表示する方法を示す完全なコードリストです。

static void Main()

    {

        var performanceCounterCategories = PerformanceCounterCategory.GetCategories()

            .FirstOrDefault(category => category.CategoryName == "Processor");

        var performanceCounters = performanceCounterCategories.GetCounters("_Total");

        Console.WriteLine("Displaying performance counters for Processor category:--\n");

        foreach (PerformanceCounter performanceCounter in performanceCounters)

        {

            Console.WriteLine(performanceCounter.CounterName);

        }

        Console.Read();

    }

カスタムパフォーマンスカウンターを作成して、そこにデータを書き込むこともできます。これを行うには、CounterCreationDataCollectionクラスとCounterCreationDataクラスを利用する必要があります。

String customCategory = "Custom Performance Counter Category";

if (!PerformanceCounterCategory.Exists(customCategory))

{

CounterCreationDataCollection counterCreationDataCollection = new CounterCreationDataCollection();

counterCreationDataCollection.Add(new CounterCreationData("Counter 1", "Sample Counter 1", PerformanceCounterType.ElapsedTime));

counterCreationDataCollection.Add(new CounterCreationData("Counter 2", "Sample Counter 2", PerformanceCounterType.SampleCounter));

counterCreationDataCollection.Add(new CounterCreationData("Counter 3", "Sample Counter 3", PerformanceCounterType.SampleCounter));

PerformanceCounterCategory.Create(customCategory, "This is just an example", PerformanceCounterCategoryType.SingleInstance, counterCreationDataCollection);

}

作成するカスタムパフォーマンスカウンターがすでに存在するかどうかを検証するために行われたかどうかのチェックに注意してください。カスタムパフォーマンスカウンターは、存在しない場合にのみ作成されます。次に、CounterCreaionDataCollectionのインスタンスが作成されます。CounterCreationDataクラスを使用して、新しいカウンターがコレクションに追加されます。必要なカウンターが追加されると、PerformanceCounterCategoryクラスのCreateメソッドが呼び出され、カスタムパフォーマンスカテゴリが作成されます。

アプリケーションには、必要なパフォーマンスカウンターにアクセスするために必要なアクセス許可が必要であることに注意してください。Visual StudioIDEを管理者モードで起動することを常にお勧めします。パフォーマンスカウンターは、アプリケーションのパフォーマンスを分析するのに大いに役立ちます。アプリケーションの実行時にパフォーマンスデータを分析できます。