次の方法で共有


プロファイル API でのガベージ コレクション

更新 : 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 列挙体を参照してください。これらのコールバックには、前のセクションで説明したシャットダウンの問題はありません。

Bb384688.alert_note(ja-jp,VS.90).gifメモ :

同時実行ガベージ コレクションは、Intel Itanium アーキテクチャ (以前の IA-64) を実装する 64 ビット システム上で WOW64 x86 エミュレータを実行しているアプリケーションではサポートされません。64 ビットの Windows システムで WOW64 を使用する方法の詳細については、「Running 32-bit Applications」を参照してください。

参照

概念

プロファイル API でのガベージ コレクションのブロッキング

その他の技術情報

プロファイル API の主要概念

プロファイリングの概要