2

パフォーマンスカウンターのコレクションを取得する方法はありますか?

つまり、次のようないくつかのパフォーマンスカウンターを作成する代わりに、

PerformanceCounter actions = new PerformanceCounter("CategoryName", "CounterName1","instance");
PerformanceCounter tests = new PerformanceCounter("CategoryName", "CounterName2", "instance");

各アイテムがCounterNameアイテムになるコレクション(CategoryName用)を取得したいと思います。

したがって、個別のカウンターを作成する必要はありません。

4

1 に答える 1

3

あなたの説明によると、私はあなたがカスタムカウンターを作成したいと思っていると思います。カウンターは一度に作成できますが、インスタンスを1つずつ作成する必要があります。

CounterCreationDataCollectionクラスとCounterCreationDataクラスを使用します。まず、カウンターデータを作成し、それらを新しいカウンターカテゴリに追加してから、インスタンスを作成します。

//Create the counters data. You could also use a loop here if your counters will have exactly these names.
CounterCreationDataCollection counters = new CounterCreationDataCollection();
counters.Add(new CounterCreationData("CounterName1", "Description of Counter1", PerformanceCounterType.AverageCount64));
counters.Add(new CounterCreationData("CounterName2", "Description of Counter2", PerformanceCounterType.AverageCount64));

//Create the category with the prwviously defined counters.
PerformanceCounterCategory.Create("CategoryName", "CategoryDescription", PerformanceCounterCategoryType.MultiInstance, counters);

//Create the Instances
CategoryName actions = new PerformanceCounter("CategoryName", "CounterName1", "Instance1", false));
CategoryName tests = new PerformanceCounter("CategoryName", "CounterName2", "Instance1", false));

私の提案は、カウンター名として一般名を使用しないことです。カウンターを作成した後、(おそらくパフォーマンスモニターを介して)データを収集する可能性があるためCounteName1、名前として使用する代わりに、カウンターが表すもの(アクション、テストなど)を使用します。

編集

特定のカテゴリのすべてのカウンタを一度に取得するには、カウンタカテゴリのインスタンスを作成し、GetCountersメソッドを使用します。

PerformanceCounterCategory category = new PerformanceCounterCategory("CategoryName");
PerformanceCounter[] counters = category.GetCounters("instance");

foreach (PerformanceCounter counter in counters)
{
    //do something with the counter
}
于 2012-07-24T15:08:59.760 に答える