Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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 contextSwitchDeadlock penelusuran kesalahan terkelola (MDA) diaktifkan ketika kebuntuan terdeteksi selama upaya transisi konteks COM.
Gejala
Gejala yang paling umum adalah bahwa panggilan pada komponen COM yang tidak dikelola dari kode terkelola tidak kembali. Gejala lain adalah penggunaan memori meningkat dari waktu ke waktu.
Penyebab
Penyebab yang paling mungkin adalah bahwa utas apartemen berulir tunggal (STA) tidak memompa pesan. Utas STA sedang menunggu tanpa memompa pesan atau melakukan operasi panjang dan tidak memungkinkan antrean pesan untuk dipompa.
Penggunaan memori meningkat dari waktu ke waktu disebabkan oleh utas finalizer yang mencoba memanggil Release komponen COM yang tidak dikelola dan komponen tersebut tidak kembali. Ini mencegah finalizer mengklaim kembali objek lain.
Secara default, model utas untuk utas utama aplikasi konsol Visual Basic adalah STA. MDA ini diaktifkan jika utas STA menggunakan interoperabilitas COM baik secara langsung atau tidak langsung melalui runtime bahasa umum atau kontrol pihak ketiga. Untuk menghindari mengaktifkan MDA ini dalam aplikasi konsol Visual Basic, terapkan MTAThreadAttribute atribut ke metode utama atau ubah aplikasi untuk memompa pesan.
Dimungkinkan agar MDA ini diaktifkan secara keliru ketika semua kondisi berikut terpenuhi:
Aplikasi membuat komponen COM dari utas STA baik secara langsung maupun tidak langsung melalui pustaka.
Aplikasi dihentikan di debugger dan pengguna melanjutkan aplikasi atau melakukan operasi langkah.
Penelusuran kesalahan yang tidak dikelola tidak diaktifkan.
Untuk menentukan apakah MDA diaktifkan secara salah, nonaktifkan semua titik henti, mulai ulang aplikasi, dan izinkan dijalankan tanpa berhenti. Jika MDA tidak diaktifkan, kemungkinan aktivasi awal adalah false. Dalam hal ini, nonaktifkan MDA untuk menghindari gangguan dengan sesi penelusuran kesalahan.
Note
MDA ini berada dalam set default untuk Visual Studio. Untuk informasi tentang cara menonaktifkan MDA, lihat Mendiagnosis Kesalahan dengan Asisten Penelusuran Kesalahan Terkelola.
Resolution
Ikuti aturan COM mengenai pemompaan pesan STA.
Efek pada Runtime
MDA ini tidak berpengaruh pada CLR. Ini hanya melaporkan data tentang konteks COM.
Hasil
Pesan yang menjelaskan konteks saat ini dan konteks target.
Konfigurasi
<mdaConfig>
<assistants>
<contextSwitchDeadlock />
</assistants>
</mdaConfig>