方法 : カスタム パフォーマンス カウンタを作成する
更新 : 2007 年 11 月
新しいカウンタを作成するには、最初にカテゴリを作成し、そのカテゴリに含める 1 つ以上のカウンタを指定します。これは、次のいずれかの方法で行います。
サーバー エクスプローラを使用して、デザイン時に 1 つ以上のカウンタを作成できます。
CounterCreationData クラスを使用して 1 つ以上のカウンタをプログラムで作成し、それを CounterCreationDataCollection 型のコレクションに追加し、このコレクションを Create メソッドの特殊な形式のパラメータとして渡します。
PerformanceCounterCategory クラスの Create メソッドを使用して、新しいカテゴリ内に 1 つのカウンタを作成できます。詳細については、「方法 : パフォーマンス カウンタのカテゴリを作成する」を参照してください。
カウンタおよびカテゴリを作成するときには、2 つの特別な問題を考慮する必要があります。まず、カスタム カテゴリおよびカスタム カウンタはリモート コンピュータ上には作成できません。次に、明示的に指定しない限り、カスタム カウンタおよびカスタム カテゴリとのやり取りは読み取り専用モードに制限されます。読み取り専用モードでは、カウンタをインクリメントまたはデクリメントしたり、カウンタに生の値やその他の値を設定したりはできません。ReadOnly プロパティを使用することにより、カスタム カウンタを書き込み可能モードに設定できます。
カウンタの作成と PerformanceCounter コンポーネントのインスタンスの作成には相違点があります。カウンタを作成する場合は、Windows オペレーティング システム内に新しいカテゴリと関連するカウンタを作成するのであり、プロジェクトやアプリケーションにコンポーネントを作成するわけではありません。PerformanceCounter コンポーネントのインスタンスを作成する場合は、外部カウンタを参照する Visual Studio プロジェクト内にコンポーネントを作成します。
メモ : |
---|
セキュリティ上の制限によって、使用できるパフォーマンス カウンタの機能が異なります。詳細については、「パフォーマンスしきい値の監視の概要」を参照してください。 |
セキュリティに関するメモ : |
---|
パフォーマンス カウンタを作成する場合は、リソースが既に存在している可能性があることに注意してください。他の (おそらく不正な) プロセスが既に、自由にアクセスできるリソースを作成している可能性もあります。パフォーマンス カウンタにデータを入れると、データは他のプロセスで利用できるようになります。 |
メモ : |
---|
Microsoft Windows NT 4.0 では、PerformanceCounter クラスは完全にはサポートされていません。システム カウンタから読み取ることはできますが、カスタム カウンタの作成、書き込み、削除を行うことはできません。 |
メモ : |
---|
お使いのマシンで、Visual Studio ユーザー インターフェイスの一部の要素の名前や場所が、次の手順とは異なる場合があります。これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。詳細については、「Visual Studio の設定」を参照してください。 |
デザイン時に新しいカテゴリとカスタム パフォーマンス カウンタを作成するには
サーバー エクスプローラ を起動し、表示するサーバーのノードを展開します。
メモ : 表示するサーバーが一覧にない場合は、サーバーを追加する必要があります。詳細については、「方法 : サーバー エクスプローラ/データベース エクスプローラにアクセスして初期化する」を参照してください。
[パフォーマンス カウンタ] ノードを右クリックし、[新しいカテゴリの作成] をクリックします。
[パフォーマンス カウンタ ビルダ] ダイアログ ボックスが表示されます。
メモ : パフォーマンス カウンタにアクセスするには、パフォーマンス カウンタにアクセスできるセキュリティ グループ (たとえば、Performance Monitor Users グループなど) のメンバである必要があります。さらに、昇格した特権が必要なアクションを実行しようとすると、管理者権限で実行している場合でも、Windows Vista でメッセージが表示されることがあります。詳細については、「Windows Vista と Visual Studio」を参照してください。
作成するカテゴリの名前と説明を入力します。
メモ : 既存のカテゴリの名前を指定すると、エラーになります。既存のカウンタ カテゴリを上書きする場合は、最初に Delete メソッドを使用してカテゴリを削除してから、新しいカテゴリを追加します。
[カウンタ一覧ビルダ] フレームで、次のように操作します。
[新規作成] ボタンをクリックします。
[カウンタ] フレームで、カテゴリ内に作成するカウンタの名前を指定します。
[種類] ボックスの一覧で種類を選択します。
カウンタの説明を入力します。
このカテゴリ内に作成する各カウンタについて、手順 4. を繰り返します。
ヒント : ダイアログ ボックスを閉じる前に、[カウンタ] ボックスの任意のカウンタを選択して、値を編集したり、カウンタを削除したりできます。
メモ : 既定では、ダイアログ ボックスで作成したカウンタおよびカテゴリは、読み書き可能になっています。ただし、PerformanceCounter コンポーネントのインスタンスによるカウンタおよびカテゴリとのやり取りは、明示的に指定しない限り読み取り専用に制限されます。
プログラムで新しいカテゴリおよびパフォーマンス カウンタのセットを作成するには
CounterCreationDataCollection 型のコレクションを作成します。
カウンタを CounterCreationData 型のオブジェクトとして作成し、必要なプロパティを設定します。
コレクションの Add メソッドを呼び出して、CounterCreationData オブジェクトをコレクションに追加します。
PerformanceCounterCategory クラスの Create メソッドを呼び出し、コレクションを渡します。
一連のカウンタを作成して、それをカテゴリの作成時に渡す方法を、次の例に示します。
' Create a collection of type CounterCreationDataCollection. Dim CounterDatas As New CounterCreationDataCollection() ' Create the counters and set their properties. Dim cdCounter1 As New CounterCreationData() Dim cdCounter2 As New CounterCreationData() cdCounter1.CounterName = "MyCounter1" cdCounter1.CounterHelp = "help string" cdCounter1.CounterType = PerformanceCounterType.NumberOfItems64 cdCounter2.CounterName = "MyCounter2" cdCounter2.CounterHelp = "help string 2" cdCounter2.CounterType = PerformanceCounterType.NumberOfItems64 ' Add both counters to the collection. CounterDatas.Add(cdCounter1) CounterDatas.Add(cdCounter2) ' Create the category and pass the collection to it. PerformanceCounterCategory.Create("Multi Counter Category", _ "Category help", PerformanceCounterCategoryType.SingleInstance, _ CounterDatas)
// Create a collection of type CounterCreationDataCollection. System.Diagnostics.CounterCreationDataCollection CounterDatas = new System.Diagnostics.CounterCreationDataCollection(); // Create the counters and set their properties. System.Diagnostics.CounterCreationData cdCounter1 = new System.Diagnostics.CounterCreationData(); System.Diagnostics.CounterCreationData cdCounter2 = new System.Diagnostics.CounterCreationData(); cdCounter1.CounterName = "Counter1"; cdCounter1.CounterHelp = "help string1"; cdCounter1.CounterType = System.Diagnostics.PerformanceCounterType.NumberOfItems64; cdCounter2.CounterName = "Counter2"; cdCounter2.CounterHelp = "help string 2"; cdCounter2.CounterType = System.Diagnostics.PerformanceCounterType.NumberOfItems64; // Add both counters to the collection. CounterDatas.Add(cdCounter1); CounterDatas.Add(cdCounter2); // Create the category and pass the collection to it. System.Diagnostics.PerformanceCounterCategory.Create( "Multi Counter Category", "Category help", PerformanceCounterCategoryType.SingleInstance, CounterDatas);