contextSwitchDeadlock MDA
Yönetilen contextSwitchDeadlock
hata ayıklama yardımcısı (MDA), denenen bir COM bağlam geçişi sırasında kilitlenme algılandığında etkinleştirilir.
Belirtiler
En yaygın belirti, yönetilen koddan yönetilmeyen com bileşenindeki bir çağrının döndürmemesidir. Bir diğer belirti de bellek kullanımının zaman içinde artmasıdır.
Nedeni
En olası neden, tek iş parçacıklı bir daire (STA) iş parçacığının iletileri pompalamamasıdır. STA iş parçacığı iletileri pompalamadan bekliyor veya uzun işlemler gerçekleştiriyor ve ileti kuyruğunun pompalamasına izin vermiyor.
Zaman içinde artan bellek kullanımı, yönetilmeyen bir COM bileşeninde çağrı Release
yapmaya çalışan sonlandırıcı iş parçacığından kaynaklanır ve bu bileşen döndürülmemiştir. Bu, sonlandırıcının diğer nesneleri geri kazanmasını önler.
Varsayılan olarak, Visual Basic konsol uygulamalarının ana iş parçacığı için iş parçacığı modeli STA'dır. Sta iş parçacığı, ortak dil çalışma zamanı veya üçüncü taraf denetimi aracılığıyla doğrudan veya dolaylı olarak COM birlikte çalışabilirliği kullanıyorsa bu MDA etkinleştirilir. Bu MDA'nın bir Visual Basic konsol uygulamasında etkinleştirilmesini önlemek için özniteliğini ana yönteme uygulayın MTAThreadAttribute veya uygulamayı iletileri pompalayarak değiştirin.
Aşağıdaki koşulların tümü karşılandığında bu MDA'nın yanlışlıkla etkinleştirilmesi mümkündür:
Uygulama, doğrudan veya dolaylı olarak kitaplıklar aracılığıyla STA iş parçacıklarından COM bileşenleri oluşturur.
Uygulama hata ayıklayıcıda durduruldu ve kullanıcı uygulamaya devam etti veya bir adım işlemi gerçekleştirdi.
Yönetilmeyen hata ayıklama etkin değil.
MDA'nın yanlış etkinleştirilip etkinleştirilmediğini belirlemek için tüm kesme noktalarını devre dışı bırakın, uygulamayı yeniden başlatın ve durdurmadan çalışmasına izin verin. MDA etkinleştirilmemişse, büyük olasılıkla ilk etkinleştirme yanlıştır. Bu durumda, hata ayıklama oturumuna müdahaleyi önlemek için MDA'yı devre dışı bırakın.
Not
Bu MDA, Visual Studio için varsayılan kümededir. MDA'ları devre dışı bırakma hakkında bilgi için bkz. Yönetilen Hata Ayıklama Yardımcılarıyla Hataları Tanılama.
Çözüm
STA ileti pompalama ile ilgili COM kurallarına uyun.
Çalışma Zamanı Üzerindeki Etkisi
Bu MDA'nın CLR üzerinde hiçbir etkisi yoktur. Yalnızca COM bağlamları hakkındaki verileri bildirir.
Çıktı
Geçerli bağlamı ve hedef bağlamı açıklayan bir ileti.
Yapılandırma
<mdaConfig>
<assistants>
<contextSwitchDeadlock />
</assistants>
</mdaConfig>
Ayrıca bkz.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin