Bagikan melalui


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>

Lihat juga