contextSwitchDeadlock MDA
Not
Bu makale .NET Framework'e özgüdür. .NET 6 ve sonraki sürümleri de dahil olmak üzere daha yeni .NET uygulamaları için geçerli değildir.
Yönetilen contextSwitchDeadlock
hata ayıklama yardımcısı (MDA), 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ürülmemesidir. Bir diğer belirti de bellek kullanımının zaman içinde artmasıdır.
Neden
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ülemez. Bu, sonlandırıcının diğer nesneleri geri kazanmasını engeller.
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 etkinleştirilmedi.
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 kesintisiz ç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üdahale etmemek 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ıyla ilgili verileri raporlar.
Çıktı
Geçerli bağlamı ve hedef bağlamı açıklayan bir ileti.
Yapılandırma
<mdaConfig>
<assistants>
<contextSwitchDeadlock />
</assistants>
</mdaConfig>