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>