プロファイラーの互換性の設定
既定では、.NET Framework Version 4 の共通言語ランタイム (CLR: Common Language Runtime) は .NET Framework 4 用に作成されたプロファイラーのみ読み込んで使用します。 .NET Framework Version 2.0、3.0、または 3.5 用に作成されたプロファイラーは、明示的に指定していない限り、読み込まれることも実行されることもありません (このトピックでは、"Version 2.0 プロファイラー" という用語は、.NET Framework Version 2.0、3.0、および 3.5 用に作成されたプロファイラーを指します)。
プロファイラーのユーザーは、Version 2.0 プロファイラーを使用するには、COMPLUS_ProfAPI_ProfilerCompatibilitySetting 環境変数を使用して明示的に指定する必要があります。 Version 2.0 プロファイラーは、.NET Framework 4 で使用すると、次のように動作します。
.NET Framework Version 2.0 のプロファイル API は、Version 2.0 のドキュメントに従って、.NET Framework 4 でこれまでどおり動作します。
Version 2.0 のプロファイル API または CLR の動作のうち、ドキュメントに記載されていない動作については、.NET Framework 4 では保証されません。 公開されていない動作に依存する Version 2.0 プロファイラーは、.NET Framework 4 では動作しない場合があります。この互換性の設定では CLR 2.0 の動作との下位互換性は提供されないことに注意してください。
COMPLUS_ProfAPI_ProfilerCompatibilitySetting
COMPLUS_ProfAPI_ProfilerCompatibilitySetting 環境変数を設定する前に、COR_PROFILER 環境変数または COR_ENABLE_PROFILING 環境変数を設定する必要があります (手順については、「プロファイル環境の設定」を参照してください)。
COMPLUS_ProfAPI_ProfilerCompatibilitySetting 環境変数は、次の表に示す 3 つの値のいずれかに設定できます。
メモ |
---|
.NET Framework Version 3.5 以前のバージョンでは、COMPLUS_ProfAPI_ProfilerCompatibilitySetting 変数はサポートされていません。COR_PROFILER 環境変数または COR_ENABLE_PROFILING 環境変数が設定されている場合、CLR は常にプロファイラーを読み込もうとします。 |
設定値 |
CLR の動作 |
---|---|
EnableV2Profiler |
Version 2.0 プロファイラーを読み込み、アクティブにします。 |
DisableV2Profiler |
Version 2.0 プロファイラーを無効にしますが、アンロードしません。 .NET Framework 4 のプロファイラーには影響ありません。 これは、既定の設定です。 |
PreventLoad |
プロファイラーが作成された対象がどのバージョンの .NET Framework であるかに関係なく、どのプロファイラーも読み込みません。 |
詳しい動作は次のとおりです。
EnableV2Profiler
.NET Framework 4 CLR は、プロファイラーが作成された対象がどのバージョンの .NET Framework であるかに関係なく、利用可能なプロファイラーを読み込んで使用します。 インプロセスの side-by-side プロファイリングでは、最初に .NET Framework Version 2.0 CLR によってプロファイラーがプロセスに読み込まれた場合、.NET Framework 4 CLR はその Version 2.0 プロファイラーの再読み込みを行いません。
DisableV2Profiler (既定値)
.NET Framework 4 CLR は、プロファイラーを読み込み、ICorProfilerCallback3 インターフェイスを検索するためにプロファイラーの IUnknown::QueryInterface メソッドを呼び出してプロファイラーのバージョンを確認します。
プロファイラーに ICorProfilerCallback3 が実装されている場合は、.NET Framework Version 4 プロファイラーであり、CLR は引き続きそのプロファイラーを使用します。
プロファイラーに ICorProfilerCallback3 が実装されていない場合は、Version 2.0 プロファイラーです。 この場合、CLR はプロファイラー インターフェイスを解放し、プロファイラーをアクティブにしません。 ただし、CLR はプロファイラー DLL をアンロードしないので、プロファイラー DLL をアンロードしない .NET Framework Version 2.0 CLR との下位互換性を維持できます (.NET Framework 4 プロファイラーはデタッチ時またはシャットダウン時にアンロードされるので、.NET Framework 4 用にプロファイラーを修正する場合は、この動作を変更する必要があります)。
PreventLoad
.NET Framework 4 CLR はプロファイラーを完全に無視します。 この設定は、インプロセスの side-by-side を使用する一部のシナリオで役立ちます。 詳細については、「インプロセスの side-by-side プロファイリング」を参照してください。
たとえば、.NET Framework 2.0 プロファイラーを読み込むように CLR に指示するには、コマンド プロンプト ウィンドウを開き、次のように入力します。
set COMPLUS_ProfAPI_ProfilerCompatibilitySetting=EnableV2Profiler
メモ |
---|
この互換性スイッチはプロファイラーの起動パスにのみ影響します。プロファイラーをアタッチして読み込む場合、ランタイムは ICorProfilerCallback3 インターフェイスに対する IUnknown::QueryInterface 関数を呼び出します。プロファイラーにこのインターフェイスが実装されていない場合 (このことは Version 2.0 プロファイラーに当てはまります)、プロファイラーは読み込まれず、プロファイラーの読み込みエラーとしてイベント ログに記録されます。 |