共用方式為


gcManagedToUnmanaged MDA

注意

本文專屬於 .NET Framework。 它不適用於較新的 .NET 實作,包括 .NET 6 和更新版本。

每當執行緒從 Managed 轉換到 Unmanaged 程式碼時,gcManagedToUnmanaged Managed 偵錯助理 (MDA) 會造成記憶體回收。

徵兆

嘗試使用已公開至 COM 的 Managed 物件時,Unmanaged 使用者元件會擲回存取違規。 COM 物件似乎已發行。 存取違規不具決定性。

原因

如果 Unmanaged 元件不是正確計算 Managed COM 物件的參考,執行階段可以收集已公開至 COM 的 Managed 物件,而 Unmanaged 元件仍會保存物件的參考。 執行階段會在記憶體回收期間呼叫 Release,因此如果使用者元件在發生記憶體回收之前使用物件,就不會被回收。 這是不具決定性的來源。

解決方法

啟用此助理可減少從物件可供回收,到呼叫 Release 之間的時間,有助於追蹤哪一個 Unmanaged 元件最先嘗試存取已收集的物件。

對執行階段的影響

每當執行緒從 Managed 轉換到 Unmanaged 程式碼時,會造成記憶體回收。

輸出

此 MDA 不會產生輸出。

組態

<mdaConfig>
  <assistants>
    <gcManagedToUnmanaged/>
  </assistants>
</mdaConfig>

另請參閱