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.
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 contextSwitchDeadlock penelusuran kesalahan terkelola (MDA) diaktifkan ketika kebuntuan terdeteksi selama transisi konteks COM yang dicoba.
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 yang panjang dan tidak memungkinkan antrean pesan untuk dipompa.
Penggunaan memori meningkat dari waktu ke waktu disebabkan oleh rangkaian penyelesai yang mencoba memanggil Release pada komponen COM yang tidak dikelola dan komponen tersebut tidak kembali. Ini mencegah penyelesai 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 maupun tidak langsung melalui runtime bahasa umum atau kontrol pihak ketiga. Untuk menghindari aktivasi MDA ini dalam aplikasi konsol Visual Basic, terapkan atribut MTAThreadAttribute ke metode utama atau ubah aplikasi untuk memompa pesan.
Dimungkinkan bagi MDA ini untuk diaktifkan secara salah 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 tidak terkelola tidak diaktifkan.
Untuk menentukan apakah MDA diaktifkan secara salah, nonaktifkan semua titik henti, mulai ulang aplikasi, dan izinkan untuk berjalan tanpa berhenti. Jika MDA tidak diaktifkan, kemungkinan aktivasi awal adalah false. Dalam hal ini, nonaktifkan MDA untuk menghindari gangguan dengan sesi penelusuran kesalahan.
Catatan
MDA ini berada dalam set default untuk Visual Studio. Untuk informasi tentang cara menonaktifkan MDA, lihat Mendiagnosis Kesalahan dengan Asisten Penelusuran Kesalahan Terkelola.
Resolusi
Ikuti aturan COM mengenai pemompaan pesan STA.
Efek pada Runtime
MDA ini tidak berpengaruh pada runtime bahasa umum. Ini hanya melaporkan data tentang konteks COM.
Output
Pesan yang menjelaskan konteks saat ini dan konteks target.
Konfigurasi
<mdaConfig>
<assistants>
<contextSwitchDeadlock />
</assistants>
</mdaConfig>