Aracılığıyla paylaş


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>

Ayrıca bkz.