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.