更新 : 2007 年 11 月
プロファイル API は、共通言語ランタイム (CLR: Common Language Runtime) で発生するさまざまなイベントとアクションについての情報を提供します。この情報を使用すると、プロセスの内部動作を監視し、.NET Framework アプリケーションのパフォーマンスを分析できます。
サポートされている機能
プロファイル API は、CLR で発生する以下のアクションとイベントについての情報を取得します。
CLR のスタートアップ イベントとシャットダウン イベント。
アプリケーション ドメインの作成イベントとシャットダウン イベント。
アセンブリの読み込みイベントとアンロード イベント。
モジュールの読み込みイベントとアンロード イベント。
COM vtable の作成イベントと破棄イベント。
Just-In-Time (JIT) コンパイル イベントとコード ピッチ イベント。
クラスの読み込みイベントとアンロード イベント。
スレッドの作成イベントと破棄イベント。
関数の開始イベントと終了イベント。
例外。
マネージ コードとアンマネージ コードの実行の切り替え。
異なるランタイム コンテキスト間の切り替え。
ランタイムの中断に関する情報。
ランタイムのメモリ ヒープとガベージ コレクションのアクティビティに関する情報。
プロファイル API は、任意の (非マネージ) COM 互換言語から呼び出すことができます。
API は、CPU とメモリの消費に関しては効率的です。プロファイルを実行しても、誤った結果をもたらすほどの大きい変化がプロファイリング対象のアプリケーションで発生することはありません。
プロファイル API は、サンプリング プロファイラと非サンプリング プロファイラの両方に役立ちます。サンプリング プロファイラは、一定のクロック刻み (たとえば 5 ミリ秒間隔) でプロファイルを検査します。非サンプリング プロファイラは、イベントの原因になったスレッドで同期的にイベントの通知を受け取ります。
サポートされていない機能
プロファイル API は、以下の機能をサポートしていません。
アンマネージ コード。CLR のプロファイル API は、マネージ コードでのみ動作します。アンマネージ コードをプロファイルするには、従来の Win32 のメカニズムを使用する必要があります。ただし、CLR プロファイラには、マネージ コードとアンマネージ コードの境界を判定するための遷移イベントが含まれます。
自動変更アプリケーション。プロファイル API は、アスペクト指向プログラミングなどのために自分自身のコードを変更するアプリケーションをサポートしていません。
範囲チェック。プロファイル API は、範囲のチェックに必要な情報を提供しません。CLR には、すべてのマネージ コードの範囲チェックのための組み込みサポートが用意されています。
リモート プロファイル。次の理由から、CLR コード プロファイラ インターフェイスはリモート プロファイルをサポートしていません。
リモート プロファイルは実行時間が長くなります。プロファイラ インターフェイスを使用するときは、プロファイルの結果に大きい影響がないように、実行時間を最小限にする必要があります。実行パフォーマンスを監視するときには、これが特に重要です。ただし、プロファイラ インターフェイスを使用して、メモリの使用状況を監視するとき、またはスタック フレームやオブジェクトなどについてのランタイム情報を取得するときには、リモート プロファイルは制約にはなりません。
CLR コード プロファイラは、プロファイリング対象のアプリケーションが実行しているローカル コンピュータのランタイムに、1 つ以上のコールバック インターフェイスを登録する必要があります。これにより、リモート コード プロファイラの作成が制限されます。
高可用性が必要な稼働環境でのプロファイル。プロファイル API は、開発時の診断をサポートするために作成された API です。稼働環境をサポートするために必要な厳密なテストは実施されていません。