Note
この記事は .NET Framework に固有のものです。 .NET 6 以降のバージョンを含む、.NET の新しい実装には適用されません。
gcManagedToUnmanagedマネージド デバッグ アシスタント (MDA) は、スレッドがマネージド コードからアンマネージド コードに移行するたびにガベージ コレクションを発生させます。
Symptoms
アンマネージ ユーザー コンポーネントは、COM に公開されていたマネージド オブジェクトを使用しようとすると、アクセス違反をスローします。 COM オブジェクトが解放されたように見えます。 アクセス違反は非決定的です。
原因
アンマネージ コンポーネントがマネージド COM オブジェクトを正しくカウントして参照していない場合、アンマネージ コンポーネントがまだオブジェクトへの参照を保持している場合、ランタイムは COM に公開されているマネージド オブジェクトを収集できます。 ランタイムはガベージ コレクション中に Release を呼び出します。そのため、ガベージ コレクションが発生する前にユーザー コンポーネントがオブジェクトを使用する場合、まだ収集されていません。 これが非決定的主義の源です。
Resolution
このアシスタントを有効にすると、オブジェクトがコレクションの対象となり、 Release が呼び出されるまでの時間が短縮され、収集されたオブジェクトに最初にアクセスしようとするアンマネージド コンポーネントを追跡するのに役立ちます。
ランタイムへの影響
スレッドがマネージド コードからアンマネージド コードに遷移するたびにガベージ コレクションが発生します。
アウトプット
この MDA は出力を生成しません。
コンフィギュレーション
<mdaConfig>
<assistants>
<gcManagedToUnmanaged/>
</assistants>
</mdaConfig>
こちらも参照ください
.NET