gcManagedToUnmanaged MDA
Catatan
Artikel ini khusus untuk .NET Framework. Ini tidak berlaku untuk implementasi .NET yang lebih baru, termasuk .NET 6 dan versi yang lebih baru.
Asisten penelusuran kesalahan terkelola gcManagedToUnmanaged
(MDA) menyebabkan pengumpulan sampah setiap kali utas beralih dari terkelola ke kode tak terkelola.
Gejala
Komponen pengguna tak terkelola menampilkan pelanggaran akses saat mencoba menggunakan objek terkelola yang telah diekspos ke COM. Objek COM tampaknya telah dirilis. Pelanggaran akses bersifat nondeterministik.
Penyebab
Jika komponen tak terkelola tidak mereferensikan penghitungan objek COM terkelola dengan benar, maka runtime bahasa umum dapat mengumpulkan objek terkelola yang diekspos ke COM ketika komponen tak terkelola masih menyimpan referensi ke objek. Runtime bahasa umum memanggil Release selama pengumpulan sampah, jadi jika komponen pengguna menggunakan objek sebelum pengumpulan sampah terjadi, maka itu belum akan dikumpulkan. Ini adalah sumber nondeterminisme.
Resolusi
Mengaktifkan asisten akan mengurangi waktu antara ketika objek memenuhi syarat untuk pengumpulan dan Release dipanggil, membantu melacak komponen tak terkelola terlebih dahulu mencoba mengakses objek yang dikumpulkan.
Efek pada Runtime
Menyebabkan pengumpulan sampah setiap kali utas beralih dari terkelola ke kode tak terkelola.
Output
MDA ini tidak menghasilkan output.
Konfigurasi
<mdaConfig>
<assistants>
<gcManagedToUnmanaged/>
</assistants>
</mdaConfig>