更新 : 2007 年 11 月
共通言語ランタイム (CLR: Common Language Runtime) が ICorProfilerCallback インターフェイスの特定のメソッドを呼び出すとき、CLR はプロファイラがその呼び出しから制御を戻すまでガベージ コレクションを実行できません。これは、プロファイル サービスが、ガベージ コレクションに対して安全な状態でスタックを構築できるとは限らないためです。代わりに、そのコールバックの間はガベージ コレクションが無効になります。この場合、プロファイラはできるだけ早く制御を戻す必要があります。この状況は、次のコールバックで発生します。
ICorProfilerCallback::ExceptionOSHandlerEnter、ICorProfilerCallback::ExceptionOSHandlerLeave
ICorProfilerCallback::ExceptionUnwindFunctionEnter、ICorProfilerCallback::ExceptionUnwindFunctionLeave
ICorProfilerCallback::ExceptionUnwindFinallyEnter、ICorProfilerCallback::ExceptionUnwindFinallyLeave
ICorProfilerCallback::ExceptionCatcherEnter、ICorProfilerCallback::ExceptionCatcherLeave
ICorProfilerCallback::ExceptionCLRCatcherFound、ICorProfilerCallback::ExceptionCLRCatcherExecute
ICorProfilerCallback::COMClassicVTableCreated、ICorProfilerCallback::COMClassicVTableDestroyed
また、次のコールバックでは、fIsSafeToBlock パラメータを使用することにより、呼び出しごとにプロファイラでガベージ コレクションをブロックできます。
プロファイラがブロックを実行する場合、ガベージ コレクションは遅延することになります。この遅延は、プロファイラがガベージ コレクションをトリガする CLR 関数を呼び出さない限り、または領域をマネージ ヒープに割り当てている限り、問題にはなりません。