方法 : パフォーマンス カウンタのサンプルを取得する
更新 : 2007 年 11 月
CounterSample クラスを使用して、サンプルを作成し、その内容に対して計算を実行できます。サンプル クラスは、定義された条件に基づいてパフォーマンス カウンタの "サンプリング" を行います。条件には、1 つ以上のカウンタの値、値を取得する頻度などが含まれます。また、このクラスはサンプルが取得された時刻も記録します。このデータをすべて 1 つのインスタンス化されたクラスにまとめ、Calculate メソッドを使用して計算を実行できます。また、Calculate メソッドを使用して、2 つの異なるサンプルの値を比較する計算も実行できます。
実行される計算は、カウンタの型によって異なります。特定のカウンタ型には特定の計算方法が関連付けられています。たとえば、ElapsedTime 型のカウンタは、2 つの異なるサンプルのタイム スタンプを比較し、経過時間を求めます。多くのカウンタは、取得されたデータに基づいて平均を計算します。
サンプルは、次の手順で定義します。
CounterSample クラスの 1 つ以上のインスタンスを作成します。
各インスタンスについて現在のサンプルを取得します。
計算に使用する各サンプルをパラメータとして渡して、Calculate メソッドを呼び出します。
パフォーマンス カウンタのサンプルを取得して計算を実行するには
PerformanceCounter インスタンスを作成し、目的のカテゴリおよびカウンタとやり取りするように設定します。詳細については、「方法 : PerformanceCounter コンポーネントのインスタンスを作成する」または「方法 : PerformanceCounter コンポーネントのインスタンスを設定する」を参照してください。
サンプリングの結果を格納する CounterSample クラスのインスタンスを作成します。
PerformanceCounter コンポーネントの NextSample メソッドを呼び出して、計算値を取得し、結果を CounterSample クラスに割り当てます。
ヒント : 計算を実行するには、2 つのサンプルを取得する必要があります。
計算の結果を格納する変数を作成し、Single 型を割り当てます。
計算に必要な 2 つのサンプルのそれぞれに対して、NextSample の戻り値を CounterSample 型の変数に代入します。
CounterSample クラスの Calculate メソッドを呼び出し、次のいずれかを行います。
サンプルを 2 つ取得した場合は、両方のサンプル (CounterSample オブジェクトとして格納されている) を Calculate メソッドにパラメータとして渡します。
サンプルを 1 つだけ取得した場合は、最初のサンプルを Calculate メソッドに渡し、2 番目のパラメータを使用してもう 1 つのサンプルを取得します。
計算の結果を、結果を格納するために作成した変数に代入します。
メモ : 2 つのサンプルは、同じ型のカウンタから取得する必要があります。カウンタの型が異なる場合、メソッドは例外をスローします。カウンタの型によって、実行される計算の種類が決まります。詳細については、「パフォーマンス カウンタの型」を参照してください。
次のコードは、サンプルを 2 つ取得し、Calculate メソッドを使用してそれを比較する方法を示しています。
' Dim variables of types CounterSample for each sample and a ' variable of type single for the results. Dim sample1 As CounterSample Dim sample2 As CounterSample Dim result As Single ' Retrieve a sample. sample1 = PerformanceCounter1.NextSample() ' Wait some interval of time here and retrieve ' a second sample. System.Threading.Thread.Sleep(1000) sample2 = PerformanceCounter1.NextSample() ' Pass both samples to the Calculate method. result = CounterSample.Calculate(sample1, sample2)
System.Diagnostics.CounterSample sample1; System.Diagnostics.CounterSample sample2; float result; // Retrieve a sample. sample1 = PerformanceCounter1.NextSample(); // Wait some interval of time here and retrieve // a second sample. System.Threading.Thread.Sleep(1000); sample2 = PerformanceCounter1.NextSample(); // Pass both samples to the Calculate method. result = System.Diagnostics.CounterSample.Calculate(sample1, sample2);
また、NextSample メソッドを呼び出して 2 番目のサンプルの値を取得することもできます。このアプローチの例を次に示します。
Dim sample1 As CounterSample Dim result As Single ' Retrieve a single sample. sample1 = PerformanceCounter1.NextSample() ' Pass the retrieved sample to the calculate method ' and retrieve another sample in the second parameter. result = CounterSample.Calculate(sample1, PerformanceCounter1.NextSample())
System.Diagnostics.CounterSample sample1; float result; // Retrieve a single sample. sample1 = PerformanceCounter1.NextSample(); // Pass the retrieved sample to the calculate method // and retrieve another sample in the second parameter. result = System.Diagnostics.CounterSample.Calculate(sample1, PerformanceCounter1.NextSample());