登録不要のプロファイラーの起動とアタッチ
.NET Framework Version 4 以降では、プロファイラーを、アプリケーションの起動時にアタッチする (起動時読み込み) ことも、アプリケーションの実行中にアタッチする (アタッチ読み込み) こともできます。 どちらの方法でも、COM コンポーネントとして登録されていないプロファイラーを起動できます。
この 2 つの方法では、異なる手順を使用してプロファイラーを起動します。それぞれの方法について、以下で説明します。
起動時読み込みのプロファイラー
起動時読み込みのプロファイラーは、プロファイル対象のアプリケーションが起動されるときに読み込まれます。 .NET Framework 4 より前は、起動時に読み込む方法がプロファイラーを読み込む唯一の方法でした。 プロファイラーは登録しておく必要があり、次の環境変数の値を使用して検索されていました。
COR_ENABLE_PROFILING=1
COR_PROFILER={プロファイラーの CLSID}
共通言語ランタイム (CLR: Common Language Runtime) では、COR_PROFILER の CLSID を使用して、レジストリの HKEY_CLASSES_ROOT からプロファイラーを検索していました。
.NET Framework 4 以降では、これまでどおりプロファイラーを登録できますが、レジストリを検索する前に別の環境変数がチェックされます。
- COR_PROFILER_PATH=プロファイラー DLL の完全パス
COR_PROFILER_PATH が存在する場合、その値を使用してプロファイラーが検索され、レジストリの検索は省略されます。
メモ:
COR_PROFILER_PATH は省略できます。 COR_PROFILER_PATH を指定しない場合、プロファイラーの CLSID を使用して、レジストリでプロファイラーのパスが検索されます。
COR_PROFILER_PATH を指定し、プロファイラーの登録も行う場合、COR_PROFILER_PATH が優先されます。 COR_PROFILER_PATH が無効なパスを指している場合は、プロファイラーが登録されていても、プロファイラーの読み込みは失敗します。
COR_PROFILER は常に指定する必要があります。 COR_PROFILER_PATH を指定した場合、レジストリの検索は省略されます。ただし、その場合でも、CreateInstance の呼び出しには COR_PROFILER の CLSID が必要です。
アタッチ読み込みのプロファイラー
.NET Framework 4 以降では、実行中のアプリケーションにプロファイラーをアタッチできます。 この機能の詳細については、「プロファイラーのアタッチとデタッチ」を参照してください。アタッチ読み込みのプロファイラーでは、ICLRProfiling::AttachProfiler メソッドの wszProfilerPath パラメーターを使用して、プロファイラー DLL ファイルの場所を検索します。wszProfilerPath が null の場合、ランタイムでは、pClsidProfiler パラメーターで指定されている CLSID をレジストリで検索して、プロファイラーを見つけます。