gcManagedToUnmanaged MDA

Note

Artikel ini khusus untuk .NET Framework. Ini tidak berlaku untuk implementasi .NET yang lebih baru, termasuk .NET 6 dan versi yang lebih baru.

Asisten gcManagedToUnmanaged penelusuran kesalahan terkelola (MDA) menyebabkan pengumpulan sampah setiap kali utas beralih dari kode yang dikelola ke tidak dikelola.

Gejala

Komponen pengguna yang tidak dikelola melempar pelanggaran akses saat mencoba menggunakan objek terkelola yang telah terekspos ke COM. Objek COM tampaknya telah dirilis. Pelanggaran akses bersifat nondeterministik.

Penyebab

Jika komponen yang tidak dikelola tidak mereferensikan penghitungan objek COM terkelola dengan benar, maka runtime dapat mengumpulkan objek terkelola yang terekspos ke COM ketika komponen yang tidak dikelola masih menyimpan referensi ke objek. Runtime memanggil Release selama pengumpulan sampah, jadi jika komponen pengguna menggunakan objek sebelum pengumpulan sampah terjadi, maka itu belum akan dikumpulkan. Ini adalah sumber dari nondeterminisme.

Resolution

Mengaktifkan asisten ini mengurangi waktu antara ketika objek memenuhi syarat untuk pengumpulan dan Release dipanggil, membantu melacak komponen yang tidak dikelola terlebih dahulu mencoba mengakses objek yang dikumpulkan.

Efek pada Runtime

Menyebabkan pengumpulan sampah setiap kali utas beralih dari terkelola ke kode yang tidak dikelola.

Hasil

MDA ini tidak menghasilkan output.

Konfigurasi

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

Baca juga