.NET Framework のパフォーマンス カウンター

この記事では、Windows パフォーマンス モニターで参照できるパフォーマンス カウンターの一覧を示します。

例外パフォーマンス カウンター

.NET CLR 例外カテゴリには、アプリケーションによってスローされる例外に関する情報を提供するカウンターが含まれています。 これらのパフォーマンス カウンターについて、次の表で説明します。

パフォーマンス カウンター 説明
# of Exceps Thrown アプリケーションの開始後にスローされた例外の総数を表示します。 この数には、.NET 例外と .NET 例外に変換されるアンマネージ例外の両方が含まれます。 たとえば、アンマネージド コードから返された HRESULT は、マネージド コードの例外に変換されます。

このカウンターには、処理済みの例外と未処理の例外の両方が含まれます。 再スローされる例外は、再びカウントされます。
# of Exceps Thrown / Sec 1 秒間にスローされた例外の数を表示します。 この数には、.NET 例外と .NET 例外に変換されるアンマネージ例外の両方が含まれます。 たとえば、アンマネージド コードから返された HRESULT は、マネージド コードの例外に変換されます。

このカウンターには、処理済みの例外と未処理の例外の両方が含まれます。 このカウンターは、全時間を通しての平均値ではなく、最後の 2 回の収集で計測された値の差を収集の間隔で割った値が表示されます。 多数 (数百を超える) の例外がスローされた場合、潜在的なパフォーマンス上の問題があることがこのカウンターによって示されます。
# of Filters / Sec 1 秒間に実行された .NET 例外フィルターの数を表示します。 例外フィルターの評価は、例外が処理済みかどうかに関係なくなされます。

このカウンターは、全時間を通しての平均値ではなく、最後の 2 回の収集で計測された値の差を収集間隔で割った値が表示されます。
# of Finallys / Sec 1 秒間に実行された finally ブロックの数を表示します。 finally ブロックは、try ブロックがどのように終了されたかに関係なく必ず実行されます。 例外に対して実行された finally ブロックだけがカウントされます。通常のコード パスで実行された finally ブロックは、このカウンターではカウントされません。

このカウンターは、全時間を通しての平均値ではなく、最後の 2 回の収集で計測された値の差を収集間隔で割った値が表示されます。
Throw to Catch Depth / Sec 1 秒間に走査されたスタック フレーム (例外をスローしたフレームから例外を処理したフレームまで) の数を表示します。 このカウンターは、例外ハンドラーに入ったときに 0 にリセットされます。したがって、入れ子になった例外ではハンドラーからハンドラーへのスタックの深さを示します。

このカウンターは、全時間を通しての平均値ではなく、最後の 2 回の収集で計測された値の差を収集間隔で割った値が表示されます。

相互運用パフォーマンス カウンター

.NET CLR 相互運用機能カテゴリには、COM コンポーネント、COM+ サービス、および外部タイプ ライブラリとのアプリケーションの対話に関する情報を提供するカウンターが含まれています。 これらのパフォーマンス カウンターについて、次の表で説明します。

パフォーマンス カウンター 説明
# of CCWs CCW (COM 呼び出し可能ラッパー) の現在数を表示します。 CCW は、アンマネージド COM クライアントから参照されているマネージド オブジェクトのプロキシです。 このカウンターは、アンマネージド COM コードによって参照されたマネージド オブジェクトの数を示します。
マーシャリングの数 アプリケーション開始後に引数および戻り値がマネージドからアンマネージド コード (およびその逆に) にマーシャリングされた回数の合計を表示します。 このカウンターは、スタブがインライン展開されている場合はインクリメントされません。 (スタブが、引数と戻り値のマーシャリングを担当します)。 通常、スタブは、マーシャリングのオーバーヘッドが小さい場合にインライン展開されます。
# of Stubs 共通言語ランタイムによって作成された現在のスタブ数を表示します。 スタブは、COM 相互運用呼び出しまたはプラットフォーム起動呼び出し時に、引数と戻り値をマネージドからアンマネージド コードへの (またはその逆の) マーシャリングを担当します。
# of TLB exports / sec 将来使用するために予約されています。
# of TLB imports / sec 将来使用するために予約されています。

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

.NET CLR JIT カテゴリには、JIT コンパイルされたコードに関する情報を提供するカウンターが含まれています。 これらのパフォーマンス カウンターについて、次の表で説明します。

パフォーマンス カウンター 説明
# of IL Bytes JITted アプリケーションの起動後に Just-In-Time (JIT) コンパイラによってコンパイルされた共通中間言語 (CIL) バイトの合計数を表示します。 このカウンターは、Total # of IL Bytes Jitted カウンターと同じです。
# of Methods JITted アプリケーションの開始後に JIT コンパイラでコンパイルされたメソッドの総数を表示します。 JIT コンパイラでプリコンパイルされているメソッドは、このカウンターに含まれません。
% Time in Jit 前回の JIT コンパイル フェーズ後に JIT コンパイルに費やされた経過時間の割合を示します。 このカウンターは、JIT コンパイル フェーズが終了するごとに、更新されます。 JIT コンパイル フェーズは、メソッドまたはその依存関係がコンパイルされたときに発生します。
IL Bytes Jitted / sec 1 秒あたりに JIT コンパイルされる CIL バイト数を表示します。 このカウンターは、全時間を通しての平均値ではなく、最後の 2 回の収集で計測された値の差を収集間隔で割った値が表示されます。
Standard Jit Failures アプリケーションの開始後に JIT コンパイラがコンパイルに失敗したピーク メソッド数を表示します。 このエラーは、CIL を検証できない場合、または JIT コンパイラに内部エラーが発生した場合に発生する可能性があります。
Total # of IL Bytes Jitted アプリケーションの起動後に JIT コンパイルされた CIL バイトの合計を表示します。 このカウンターは、# of IL Bytes Jitted カウンターと同じです。

読み込みパフォーマンス カウンター

.NET CLR 読み込みカテゴリには、読み込まれたアセンブリ、クラス、アプリケーションの操作メインに関する情報を提供するカウンターが含まれています。 これらのパフォーマンス カウンターについて、次の表で説明します。

パフォーマンス カウンター 説明
% Time Loading 将来使用するために予約されています。
Assembly Search Length 将来使用するために予約されています。
Bytes in Loader Heap クラス ローダーによって、すべてのアプリケーション ドメインで現在コミットされているメモリのサイズ (バイト数) を表示します。 コミットされたメモリとは、ディスク ページング ファイル内で予約された物理領域のことです。
Current appdomains アプリケーションに読み込まれた現在のアプリケーション ドメイン数を表示します。
現在のアセンブリ 現在実行中のアプリケーションのすべてのアプリケーション ドメインに読み込まれた現在のアセンブリ数を表示します。 多数のアプリケーション ドメインからアセンブリがドメイン中立として読み込まれた場合、このカウンターは一度だけインクリメントされます。
Current Classes Loaded すべてのアセンブリに読み込まれた現在のクラス数を表示します。
Rate of appdomains 1 秒間に読み込まれたアプリケーション ドメイン数を表示します。 このカウンターは、全時間を通しての平均値ではなく、最後の 2 回の収集で計測された値の差を収集間隔で割った値が表示されます。
Rate of appdomains unloaded 1 秒間にアンロードされたアプリケーション ドメイン数を表示します。 このカウンターは、全時間を通しての平均値ではなく、最後の 2 回の収集で計測された値の差を収集間隔で割った値が表示されます。
Rate of Assemblies すべてのアプリケーション ドメインにわたって 1 秒間に読み込まれたアセンブリ数を表示します。 多数のアプリケーション ドメインからアセンブリがドメイン中立として読み込まれた場合、このカウンターは一度だけインクリメントされます。

このカウンターは、全時間を通しての平均値ではなく、最後の 2 回の収集で計測された値の差を収集間隔で割った値が表示されます。
Rate of Classes Loaded 1 秒間にすべてのアセンブリに読み込まれたクラスの数を表示します。 このカウンターは、全時間を通しての平均値ではなく、最後の 2 回の収集で計測された値の差を収集間隔で割った値が表示されます。
Rate of Load Failures 1 秒間で読み込みに失敗したクラスの数を表示します。 このカウンターは、全時間を通しての平均値ではなく、最後の 2 回の収集で計測された値の差を収集間隔で割った値が表示されます。

読み取りエラーは、不十分なセキュリティや無効な書式など、さまざまな理由で発生します。 詳細については、プロファイリング サービスのヘルプを参照してください。
Total # of Load Failures アプリケーションの開始後に読み込みに失敗したクラスのピーク数を表示します。

読み取りエラーは、不十分なセキュリティや無効な書式など、さまざまな理由で発生します。 詳細については、プロファイリング サービスのヘルプを参照してください。
Total Appdomains アプリケーションの開始後に読み込まれたアプリケーション ドメインのピーク数を表示します。
Total appdomains unloaded アプリケーションの開始後にアンロードされたアプリケーション ドメインの総数を表示します。 アプリケーション ドメインが複数回読み込まれ、アンロードされた場合、このカウンターは、アプリケーション ドメインがアンロードされるごとにインクリメントされます。
Total Assemblies アプリケーションの開始後に読み込まれたアセンブリの総数を表示します。 多数のアプリケーション ドメインからアセンブリがドメイン中立として読み込まれた場合、このカウンターは一度だけインクリメントされます。
Total Classes Loaded アプリケーションの開始後にすべてのアセンブリに読み込まれたクラスの累計数を表示します。

ロックおよびスレッド パフォーマンス カウンター

.NET CLR LocksAndThreads カテゴリには、アプリケーションが使用するマネージド ロックとスレッドに関する情報を提供するカウンターが含まれています。 これらのパフォーマンス カウンターについて、次の表で説明します。

パフォーマンス カウンター 説明
# of current logical Threads アプリケーションの現在のマネージド スレッド オブジェクト数を表示します。 このカウンターでは、実行中のスレッドと停止中のスレッドの両方がカウントされます。 このカウンターは、全時間を通じての平均値ではなく、最後に計測された値のみが表示されます。
# of current physical Threads マネージド スレッド オブジェクトの基になるスレッドとして使用するために共通言語ランタイムによって作成され、所有されているネイティブのオペレーティング システムのスレッド数を表示します。 このカウンターの値には、ランタイムが内部操作で使用するスレッドは含まれません。オペレーティング システム プロセスのスレッドのサブセットがカウントされます。
# of current recognized threads ランタイムによって現在認識されているスレッド数を表示します。 これらのスレッドは対応するマネージド スレッド オブジェクトに関連付けられます。 ランタイムはこれらのスレッドを作成しませんが、少なくとも一度はランタイムの内部で実行します。

一意のスレッドだけが追跡されます。これらのスレッドは同じスレッド ID で、ランタイムに再入力されるか、スレッド終了後に再作成され、2 回はカウントされません。
# of total recognized Threads アプリケーションの開始後にランタイムによって認識されたスレッドの総数を表示します。 これらのスレッドは対応するマネージド スレッド オブジェクトに関連付けられます。 ランタイムはこれらのスレッドを作成しませんが、少なくとも一度はランタイムの内部で実行します。

一意のスレッドだけが追跡されます。これらのスレッドは同じスレッド ID で、ランタイムに再入力されるか、スレッド終了後に再作成され、2 回はカウントされません。
Contention Rate / Sec ランタイムのスレッドがマネージド ロック取得の試みに失敗する競合レートを表示します。
Current Queue Length アプリケーション内でマネージド ロックを待機中のスレッドの総数を表示します。 このカウンターは、全時間を通じての平均値ではなく、最後に計測された値を表示します。
Queue Length / sec アプリケーション内でロックの取得を待機中の 1 秒あたりのスレッド数を表示します。 このカウンターは、全時間を通しての平均値ではなく、最後の 2 回の収集で計測された値の差を収集間隔で割った値が表示されます。
Queue Length Peak アプリケーションの開始後にマネージド ロックの取得を待機していたスレッドの総数を表示します。
rate of recognized threads / sec 1 秒間にランタイムによって認識されたスレッド数を表示します。 これらのスレッドは対応するマネージド スレッド オブジェクトに関連付けられます。 ランタイムはこれらのスレッドを作成しませんが、少なくとも一度はランタイムの内部で実行します。

一意のスレッドだけが追跡されます。これらのスレッドは同じスレッド ID で、ランタイムに再入力されるか、スレッド終了後に再作成され、2 回はカウントされません。

このカウンターは、全時間を通しての平均値ではなく、最後の 2 回の収集で計測された値の差を収集間隔で割った値が表示されます。
Total # of Contentions ランタイムのスレッドがマネージド ロックを取得しようとして失敗した回数の合計を表示します。

メモリ パフォーマンス カウンター

.NET CLR メモリ カテゴリには、ガベージ コレクターに関する情報を提供するカウンターが含まれています。 これらのパフォーマンス カウンターについて、次の表で説明します。

パフォーマンス カウンター 説明
# Bytes in all Heaps Gen 1 Heap SizeGen 2 Heap Size、および Large Object Heap Size カウンターの合計値を表示します。 このカウンターは、ガベージ コレクション ヒープに割り当てられている現在のメモリをバイト数で示します。
# GC Handles 現在使用中のガベージ コレクション ハンドルの数を表示します。 ガベージ コレクション ハンドルは、共通言語ランタイムおよびマネージド環境の外部のリソースへのハンドルです。
# Gen 0 Collections アプリケーションの開始後に、ジェネレーション 0 のオブジェクト (最後に割り当てられた、最も若いオブジェクト) がガベージ コレクションされた回数を表示します。

ジェネレーション 0 ガベージ コレクションは、割り当て要求を満たすために利用できるジェネレーション 0 のメモリが不足したときに発生します。 このカウンターは、ジェネレーション 0 のガベージ コレクションの最後にインクリメントされます。 上位のジェネレーションのガベージ コレクションには、それより下位のすべてのジェネレーションのコレクションが含まれます。 このカウンターは、上位のジェネレーション (ジェネレーション 1 または 2) ガベージ コレクションが発生したときに明示的にインクリメントされます。

このカウンターは、最後に計測された値を表示します。 _Global_ カウンターの値は正確でないので、無視する必要があります。
# Gen 1 Collections アプリケーションの開始後にジェネレーション 1 のオブジェクトをガベージ コレクションした回数を表示します。

このカウンターは、ジェネレーション 1 のガベージ コレクションの最後にインクリメントされます。 上位のジェネレーションのガベージ コレクションには、それより下位のすべてのジェネレーションのコレクションが含まれます。 このカウンターは、上位のジェネレーション (ジェネレーション 2) ガベージ コレクションが発生したときに明示的にインクリメントされます。

このカウンターは、最後に計測された値を表示します。 _Global_ カウンターの値は正確でないので、無視する必要があります。
# Gen 2 Collections アプリケーションの開始後にジェネレーション 2 のオブジェクトをガベージ コレクションした回数を表示します。 このカウンターは、ジェネレーション 2 ガベージ コレクション (フル ガベージ コレクションとも呼ばれる) の最後にインクリメントされます。

このカウンターは、最後に計測された値を表示します。 _Global_ カウンターの値は正確でないので、無視する必要があります。
# Induced GC 明示的な GC.Collect 呼び出しが原因でガベージ コレクションが実行されたピーク回数を表示します。 ガベージ コレクターのコレクションの頻度を調整することをお勧めします。
# of Pinned Objects 最後のガベージ コレクションで検出されたピン止めオブジェクトの数を表示します。 ピン止めオブジェクトとは、ガベージ コレクターがメモリ内を移動させることのできないオブジェクトです。 このカウンターは、ガベージ コレクションされるヒープ内のピン止めオブジェクトだけを追跡します。 たとえば、ジェネレーション 0 のガベージ コレクションは、ジェネレーション 0 のヒープ内のピン止めオブジェクトだけを列挙します。
# of Sink Blocks in use 現在使用中の同期ブロックの数を表示します。 同期ブロックは、同期情報を格納するためにオブジェクトごとに割り当てられるデータ構造体です。 同期ブロックは、マネージド オブジェクトへの弱い参照を保持します。ガベージ コレクターは、同期ブロックをスキャンする必要があります。 同期ブロックには、同期情報だけでなく、COM 相互運用メタデータも格納できます。 このカウンターは、同期プリミティブの頻繁な使用に関係するパフォーマンス問題を示します。
# Total committed Bytes ガベージ コレクターによって現在コミットされている仮想メモリの量をバイト数で表示します。 コミットされたメモリとは、ディスク ページング ファイル内で領域が予約された物理メモリのことです。
# Total reserved Bytes ガベージ コレクターによって現在予約済みの仮想メモリの量をバイト数で表示します。 予約済みのメモリとは、アプリケーション用に予約された仮想メモリ空間のことですが、ディスクやメイン メモリ ページは使用されません。
% Time in GC 前回のガベージ コレクション サイクルにガベージ コレクションの実行に費やされた経過時間の割合を表示します。 このカウンターは、通常、ガベージ コレクターがアプリケーションに代わってメモリをコレクションし、メモリの領域を圧縮するために実行した作業量を示します。 このカウンターは、ガベージ コレクションが終了するごとにのみ、更新されます。 このカウンターは、平均値ではなく、最後に計測された値を反映します。
Allocated Bytes/second 1 秒間にガベージ コレクション ヒープに割り当てられたバイト数を表示します。 このカウンターは、割り当てがなされるたびに更新されるのではなく、ガベージ コレクションが終了するごとに、更新されます。 このカウンターは、全時間を通しての平均値ではなく、最後の 2 回の収集で計測された値の差を収集間隔で割った値が表示されます。
Finalization Survivors ガベージ コレクションされたオブジェクトのうち、終了待機中のためにコレクションされなかったものの数を表示します。 これらのオブジェクトが他のオブジェクトへの参照を保持している場合は、参照先のオブジェクトもコレクションされず、このカウンターではカウントされません。 Promoted Finalization-Memory from Gen 0 カウンターは、終了処理のためにコレクションされなかったすべてのメモリを表します。

このカウンターの値は累計値ではありません。カウンター値は、ガベージ コレクションが終了するごとに、各コレクションのみでの残存オブジェクト数に更新されます。 このカウンターは、アプリケーションが終了処理のために必要とする追加のオーバーヘッドを示します。
Gen 0 heap size ジェネレーション 0 に割り当てることができる最大バイト数を表示します。ジェネレーション 0 に現在割り当てられているバイト数を示すのではありません。

前回のコレクションの後でなされた割り当てがこのサイズを超えると、ジェネレーション 0 のガベージ コレクションが発生します。 ジェネレーション 0 のサイズは、ガベージ コレクターによって調整され、アプリケーションの実行中に変更できます。 ジェネレーション 0 コレクションの最後には、ジェネレーション 0 ヒープのサイズは 0 バイトになります。 このカウンターは、次のジェネレーション 0 ガベージ コレクションを起動する割り当てのサイズをバイト数で表示します。

このカウンターは、割り当てがなされるたびに更新されるのではなく、ガベージ コレクションが 1 回終了するごとに更新されます。
Gen 0 Promoted Bytes/Sec 1 秒間にジェネレーション 0 からジェネレーション 1 に昇格されるバイト数を表示します。 メモリは、ガベージ コレクションで回収されなかった場合に昇格されます。 このカウンターは、1 秒間に作成される、比較的有効期間の長いオブジェクトの数を示します。

このカウンターには、最後の 2 回の収集で計測された値の差を収集間隔で割った値が表示されます。
Gen 1 heap size ジェネレーション 1 の現在のバイト数を表示します。このカウンターは、ジェネレーション 1 の最大サイズを表示するのではありません。 ジェネレーション 1 では、オブジェクトは直接には割り当てられず、前のジェネレーション 0 ガベージ コレクションから昇格されます。 このカウンターは、割り当てがなされるたびに更新されるのではなく、ガベージ コレクションが 1 回終了するごとに更新されます。
Gen 1 Promoted Bytes/Sec 1 秒間にジェネレーション 1 からジェネレーション 2 に昇格されるバイト数を表示します。 終了待機中という理由だけで昇格されるオブジェクトは、このカウンターには含まれません。

メモリは、ガベージ コレクションで回収されなかった場合に昇格されます。 ジェネレーション 2 は最も古いジェネレーションであるため、ジェネレーション 2 からは昇格されません。 このカウンターは、1 秒間に作成される非常に有効期間の長いオブジェクトを示します。

このカウンターには、最後の 2 回の収集で計測された値の差を収集間隔で割った値が表示されます。
Gen 2 heap size ジェネレーション 2 の現在のバイト数を表示します。 ジェネレーション 2 では、オブジェクトは直接には割り当てられず、前のジェネレーション 1 のガベージ コレクション中にジェネレーション 1 から昇格されます。 このカウンターは、割り当てがなされるたびに更新されるのではなく、ガベージ コレクションが 1 回終了するごとに更新されます。
Large Object Heap size 大きいオブジェクトのヒープの現在のサイズをバイト数で表示します。 約 85,000 バイトより大きいオブジェクトは、ガベージ コレクターによって大きいオブジェクトとして扱われ、特殊なヒープに直接割り当てられます。 それらに対してジェネレーション間の昇格は実行されません。 このカウンターは、割り当てがなされるたびに更新されるのではなく、ガベージ コレクションが 1 回終了するごとに更新されます。
プロセス ID 監視される CLR プロセス インスタンスのプロセス ID を表示します。
Promoted Finalization-Memory from Gen 0 ジェネレーション 0 からジェネレーション 1 に昇格されるメモリのうち、終了待機中という理由だけで昇格されるメモリのバイト数を表示します。 このカウンターは累計値ではありません。最後のガベージ コレクションで計測された値を表示します。
Promoted Memory from Gen 0 ガベージ コレクションで回収されず、ジェネレーション 0 からジェネレーション 1 に昇格されるメモリのバイト数を表示します。 終了待機中という理由だけで昇格されるオブジェクトは、このカウンターには含まれません。 このカウンターは累計値ではありません。最後のガベージ コレクションで計測された値を表示します。
Promoted Memory from Gen 1 ガベージ コレクションで回収されず、ジェネレーション 1 からジェネレーション 2 に昇格されるメモリのバイト数を表示します。 終了待機中という理由だけで昇格されるオブジェクトは、このカウンターには含まれません。 このカウンターは累計値ではありません。最後のガベージ コレクションで計測された値を表示します。 このカウンターは、最後のガベージ コレクションがジェネレーション 0 のコレクションである場合だけ、0 にリセットされます。

ネットワーク パフォーマンス カウンター

.NET CLR ネットワーク カテゴリには、アプリケーションがネットワーク経由で送受信するデータに関する情報を提供するカウンターが含まれています。 これらのパフォーマンス カウンターについて、次の表で説明します。

パフォーマンス カウンター 説明
受信バイト数 プロセスの開始後に AppDomain 内のすべての Socket オブジェクトが受信した累計バイト数。 この数には、データおよび TCP/IP によって定義されていないプロトコル情報が含まれます。
送信バイト数 プロセスの開始後に AppDomain 内のすべての Socket オブジェクトが送信した累計バイト数。 この数には、データおよび TCP/IP によって定義されていないプロトコル情報が含まれます。
Connections Established プロセスの開始後に AppDomain 内で接続されていたストリーム ソケットの Socket オブジェクトの累計数。
Datagrams Received プロセスの開始後に AppDomain 内のすべての Socket オブジェクトが受信したデータグラム パケットの累計バイト数。
Datagrams Sent プロセスの開始後に AppDomain 内のすべての Socket オブジェクトが送信したデータグラム パケットの累計バイト数。
HttpWebRequests Average Lifetime プロセスの開始後に AppDomain 内で最後の間隔で終了したすべての HttpWebRequest オブジェクトの平均完了時間。
HttpWebRequests Average Queue Time プロセスの開始後に AppDomain 内で最後の間隔でキューに残ったすべての HttpWebRequest オブジェクトのキューでの平均待機時間。
HttpWebRequests Created/sec AppDomain 内で 1 秒あたりに作成された HttpWebRequest オブジェクトの数。
HttpWebRequests Queued/sec AppDomain 内で 1 秒あたりにキューに追加された HttpWebRequest オブジェクトの数。
HttpWebRequests Aborted/sec AppDomain 内でアプリケーションが Abort メソッドを呼び出した HttpWebRequest オブジェクトの 1 秒あたりの数。
HttpWebRequests Failed/sec AppDomain 内でサーバーから失敗したステータス コードを受け取った HttpWebRequest オブジェクトの 1 秒あたりの数。

サポートされているネットワーク パフォーマンス カウンターのクラスを次に示します。

  • イベントが発生した回数を測定するイベント カウンター。
  • 送信または受信されたデータの量を測定するデータ カウンター。
  • 各種プロセスが実行される時間を測定する時間計測カウンター。 時間は、オブジェクトの状態が変わった後に、間隔 (通常は秒単位) ごとに計測されます。
  • 間隔 (通常は秒単位) ごとに特定の遷移を形成するオブジェクトの数を測定する間隔ごとのカウンター。

イベントのネットワーク パフォーマンス カウンターには、次のようなものがあります。

  • Connections Established
  • Datagrams Received
  • Datagrams Sent

これらのパフォーマンス カウンターは、プロセス開始後のカウントを提供します。 確立された Socket 接続のカウントには、確立されたストリーム ソケット接続用のアプリケーションによる明示的な Socket メソッド呼び出しと、その他のクラス (HttpWebRequestFtpWebRequestWebClientTcpClient など) による Socket クラスの内部呼び出しが含まれます。

Datagrams ReceivedDatagrams Sent のカウントには、アプリケーションによる明示的な Socket メソッド呼び出しを使用して送受信されたデータグラム パケットと、その他のクラス (UdpClient など) による Socket の内部呼び出しが含まれます。 クラスの新しいインスタンスを初期化します。 Datagrams ReceivedDatagrams Sent のカウントは、データグラムの平均的なサイズを推測することで、データグラムを使用して送受信されたバイトの数の概算を提供するためにも使用できます。

データのネットワーク パフォーマンス カウンターには、次のようなものがあります。

  • 受信バイト数
  • 送信バイト数

これらのカウンターは、プロセス開始後のバイトのカウントを提供します。

HttpWebRequest オブジェクトが有効期間全体またはその一部を通過するのに要する時間を計測する時間計測カウンターには、次の 2 つがあります。

  • HttpWebRequests Average Lifetime
  • HttpWebRequests Average Queue Time

HttpWebRequests Average Lifetime カウンターの場合、大部分の HttpWebRequest オブジェクトの有効期間は、常に、オブジェクトが作成されたときに開始し、アプリケーションによって応答ストリームが閉じられたときに終了します。 ただし、例外的なシナリオが 2 つあります。

  • アプリケーションが GetResponse メソッドまたは BeginGetResponse メソッドの呼び出しをしない場合、HttpWebRequest オブジェクトの有効期間は無視されます。

  • GetResponse メソッドまたは EndGetResponse メソッドを呼び出したときに HttpWebRequest オブジェクトが WebException をスローした場合、その例外がスローされたときに有効期間は終了します。 技術的には、基になる応答ストリームもその時点で閉じられます (ユーザーに返される応答ストリームは、実際には、応答ストリームのコピーを含むメモリ ストリームです)。

間隔ごとに特定の HttpWebRequest オブジェクトの動作を追跡するカウンターが 4 つあります。 これらのパフォーマンス カウンターは、アプリケーション開発者、管理者、およびサポート スタッフが、HttpWebRequest オブジェクトの動作をより的確に把握するのに役立ちます。 これらのカウンターは、次のとおりです。

  • HttpWebRequests Created/sec
  • HttpWebRequests Queued/sec
  • HttpWebRequests Aborted/sec
  • HttpWebRequests Failed/sec

HttpWebRequests Aborted/sec カウンターでは、Abort の内部呼び出しもカウントされます。 これらの内部呼び出しは、通常、一部のアプリケーションが測定するタイムアウトによって発生します。

HttpWebRequests Failed/sec カウンターには、サーバーから失敗したステータス コードを受け取った HttpWebRequest オブジェクトの 1 秒あたりの数が含まれます。 これは、要求の終了時に Http サーバーから受け取ったステータス コードが 200 ~ 299 の範囲内にないことを意味します。 ステータス コードが処理され、結果として新しい要求が発行されると (401 Unauthorized ステータス コードの大半など)、ステータス コードは再試行の結果に基づいて失敗または成功します。 再試行においてアプリケーションにエラーがあると、このカウンターはインクリメントされます。

ネットワーク パフォーマンス カウンターにアクセスして管理するには、PerformanceCounter および System.Diagnostics 名前空間内の関連クラスを使用します。 ネットワーク パフォーマンス カウンターは、Windows パフォーマンス モニター コンソールでも参照できます。

ネットワーク パフォーマンス カウンターは、使用される構成ファイルで有効になっている必要があります。 すべてのネットワーク パフォーマンス カウンターは、構成ファイル内の 1 つの設定で有効または無効にされます。 ネットワーク パフォーマンス カウンターを個別に有効または無効にすることはできません。 詳細については、「<performanceCounter> 要素 (ネットワーク設定)」を参照してください。

ネットワーク カウンターが有効であると、per-AppDomain カウンターとグローバル パフォーマンス カウンターの両方が作成され、更新されます。 無効にすると、アプリケーションはどのネットワーク パフォーマンス カウンターのデータも提供しません。

パフォーマンス カウンターはカテゴリにグループ化されます。 次のコードは、すべてのカテゴリの一覧を示しています。

PerformanceCounterCategory[] Array = PerformanceCounterCategory.GetCategories();
for (int i = 0; i < Array.Length; i++)
{
    Console.Out.WriteLine("{0}. Name={1} Help={2}", i, Array[i].CategoryName, Array[i].CategoryHelp);
}

ネットワーク パフォーマンス カウンターは、次の 2 つのカテゴリに一覧表示されます。

  • ".NET CLR Networking" - .NET Framework Version 2 で導入され、.NET Framework Version 2 以降でサポートされている元のパフォーマンス カウンター。

  • ".NET CLR Networking 4.0.0.0" - 上に示したすべてのソケット カウンターと、.NET Framework Version 4 以降でサポートされている新しいパフォーマンス カウンター。 これらの新しいカウンターは、HttpWebRequest オブジェクトに関するパフォーマンス情報を提供します。

アプリケーションでパフォーマンス カウンターにアクセスして管理する方法の詳細については、「パフォーマンス カウンター」を参照してください。

セキュリティ パフォーマンス カウンター

.NET CLR セキュリティ カテゴリには、共通言語ランタイムがアプリケーションに対して実行するセキュリティ チェックに関する情報を提供するカウンターが含まれています。 これらのパフォーマンス カウンターについて、次の表で説明します。

パフォーマンス カウンター 説明
# Link Time Checks アプリケーションの開始後に実行されたリンク時のコード アクセス セキュリティ チェックの総数を表示します。 リンク時のコード アクセス セキュリティ チェックは、ジャスト イン タイム (JIT) コンパイル時に呼び出し元が特別のアクセス許可を要求したときに実行されます。 リンク時のチェックは、呼び出し元ごとに 1 回実行されます。 このカウントは、重大なパフォーマンス上の問題を示すのではなく、単にセキュリティ システムの実行状況を示します。
% Time in RT checks 最後の収集の後にランタイム コード アクセス セキュリティ チェックの実行に費やされた経過時間の割合を表示します。 このカウンターは、.NET Framework セキュリティ チェックの最後に更新されます。 このカウンターは、平均値ではなく、最後に計測された値を表します。
% Time Sig Authenticating 将来使用するために予約されています。
Stack Walk Depth 最後のランタイム コード アクセス セキュリティ チェック時のスタックの深さを表示します。 ランタイム コード アクセス セキュリティ チェックは、スタックを調査することによって実行されます。 このカウンターは、平均値ではなく、最後に計測された値のみを表示します。
Total Runtime Checks アプリケーションの開始後に実行されたランタイム コード アクセス セキュリティ チェックの総数を表示します。 ランタイム コード アクセス セキュリティ チェックは、呼び出し元が特別のアクセス許可を要求したときに実行されます。 ランタイム チェックは、呼び出し元からのすべての呼び出しに対して実行され、呼び出し元の現在のスレッド スタックをチェックします。 このカウンターを Stack Walk Depth カウンターと共に使用することで、セキュリティ チェック時に発生するパフォーマンス低下を把握できます。

関連項目