gcUnmanagedToManaged MDA

更新 : 2007 年 11 月

gcUnmanagedToManaged マネージ デバッグ アシスタント (MDA: Managed Debugging Assistant) は、アンマネージ コードからマネージ コードへのスレッド遷移時に、毎回ガベージ コレクションが行われるようにします。

症状

COM およびプラットフォーム呼び出しを使用してアンマネージ ユーザー コンポーネントを実行中のアプリケーションによって、CLR で非確定的なアクセス違反が発生します。

原因

アプリケーションがアンマネージ ユーザー コンポーネントを実行中の場合、それらのコンポーネントが原因で、ガベージ コレクトされたヒープが破損した可能性があります。これが原因で、ガベージ コレクタがオブジェクト グラフをウォークしようとしたときに、CLR でアクセス違反が発生します。

解決策

このアシスタントを有効にすると、各マネージ遷移の前にガベージ コレクションが行われるため、アンマネージ コンポーネントがガベージ コレクトされたヒープを破損してから、アクセス違反が発生するまでの時間が短縮されます。

ランタイムへの影響

アンマネージ コードからマネージ コードへのスレッド遷移時に、常にガベージ コレクションが行われるようになります。

出力

この MDA は、出力を生成しません。

構成

<mdaConfig>
  <assistants>
    <gcUnmanagedToManaged/>
  </assistants>
</mdaConfig>

参照

概念

マネージ デバッグ アシスタントによるエラーの診断

相互運用マーシャリングの概要

参照

gcManagedToUnmanaged MDA

MarshalAsAttribute

その他の技術情報

相互運用性