更新 : 2007 年 11 月
プロファイラは、ガベージ コレクションの通知を受け取ることができます。
ユーザーが COR_PRF_MONITOR_GC フラグを指定すると、ICorProfilerCallback::ObjectAllocated イベントを除くすべてのガベージ コレクション イベントがプロファイラに通知されます。パフォーマンス上の理由により、ObjectAllocated イベントは COR_PRF_MONITOR_OBJECT_ALLOCATED フラグによって明示的に制御されます。COR_PRF_MONITOR_GC フラグを有効にすると、同時実行ガベージ コレクションがオフになることに注意してください。
.NET Framework Version 1.0 および 1.1 では、コード プロファイラは ICorProfilerCallback::RuntimeSuspendFinished コールバックと ICorProfilerCallback::RuntimeResumeStarted コールバックを監視することによって、ガベージ コレクションが実行されていることを確認します (中断の理由が COR_PRF_SUSPEND_FOR_GC の場合)。シャットダウン中は、共通言語ランタイム (CLR: Common Language Runtime) も中断され、コード プロファイラに通知されないままガベージ コレクションが 1 回以上実行される場合があります。これは、ランタイムが既に中断状態になっているためです。このような状況では、ガベージ コレクションの完了を検出することは容易ではありません。コード プロファイラは、ICorProfilerCallback::ObjectReferences コールバックまたは ICorProfilerCallback::RootReferences コールバックの後に発生する、最初の ObjectAllocated コールバックを検出する必要があります。
.NET Framework Version 2.0 以降のバージョンでは、コード プロファイラは ICorProfilerCallback2::GarbageCollectionStarted コールバックおよび ICorProfilerCallback2::GarbageCollectionFinished コールバックを使用して、ガベージ コレクションが実行されていることを確認し、どのジェネレーションに対応しているかを識別できます。ガベージ コレクションのジェネレーションの詳細については、COR_PRF_GC_GENERATION 列挙体を参照してください。これらのコールバックには、前のセクションで説明したシャットダウンの問題はありません。
![]() |
---|
同時実行ガベージ コレクションは、Intel Itanium アーキテクチャ (以前の IA-64) を実装する 64 ビット システム上で WOW64 x86 エミュレータを実行しているアプリケーションではサポートされません。64 ビットの Windows システムで WOW64 を使用する方法の詳細については、「Running 32-bit Applications」を参照してください。 |
参照
概念
プロファイル API でのガベージ コレクションのブロッキング