Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu öğreticide şunları yapacaksınız:
- Bellek dökümü açma
- Dökümde çözümleyicileri seçme ve yürütme
- Çözümleyicilerin sonuçlarını gözden geçirme
- Sorunlu koda gezinme
Bu makalede açıklanan örnekte, sorun uygulamanızın isteklere zamanında yanıt vermemesidir.
Visual Studio'da bellek dökümü açma
Dosya > Aç > menü komutunu kullanarak Visual Studio'da bellek dökümünü açın ve bellek dökümünüzü seçin.
Bellek Dökümü Özeti sayfasında Tanılama Analizini Çalıştır adlı yeni bir Eyleme dikkat edin.
Hata ayıklayıcıyı başlatmak için bu eylemi seçin ve temel alınan belirtiye göre düzenlenmiş kullanılabilir çözümleyici seçeneklerinin listesini içeren yeni Tanılama Analizi sayfasını açın.
Dökümde çözümleyicileri seçme ve yürütme
Bu belirtileri araştırmak için, bu örnekteki sorunla en iyi şekilde eşleştiğinden İşlem Yanıt Hızı altında en iyi seçenekler kullanılabilir.
Araştırma işlemini başlatmak için Çözümle düğmesine tıklayın
Çözümleyici, bellek dökümü içinde yakalanan işlem bilgileri ve CLR verilerinin birleşimine göre sonuçlar sunar.
Çözümleyicilerin sonuçlarını gözden geçirme
Bu durumda çözümleyici iki hata buldu. Çözümleme Özeti'ni ve önerilen Düzeltmeyi görmek için çözümleyici sonucunu seçin.
Çözümleme Özeti, "CLR iş parçacığı havuzunda açlık yaşandığını" belirtti. Bu bilgiler, CLR'nin şu anda tüm kullanılabilir iş parçacığı havuzu iş parçacıklarını kullandığını gösterir. Bu, bir iş parçacığı serbest bırakılana kadar hizmetinizin yeni isteklere yanıt veremeyeceği anlamına gelir.
Not
Bu durumda düzeltme şu şekildedir: "İzleyiciler, Olaylar, Görev veya iş parçacığınızı engelleyebilecek diğer nesneler için zaman uyumlu olarak beklemeyin. Yöntemi zaman uyumsuz olacak şekilde güncelleştirip güncelleştirebileceğinize bakın."
Sorunlu koda gezinme
Sıradaki işim sorunlu kodu bulmak.
Visual Studio çağrı yığınını göster bağlantısına tıklandığında hemen bu davranışı sergileyen iş parçacıklarına geçilir.
Çağrı Yığını penceresinde, kodumu (SyncOverAsyncExmple.) Çerçeve kodundan (System.) hızla ayırt etme olasılığı olan yöntemler gösterilir.
Her çağrı yığını çerçevesi bir yönteme karşılık gelir ve yığın çerçevelerine çift tıklayarak Visual Studio bu iş parçacığında doğrudan bu senaryoya yol açan koda gider.
Bu örnekte sembol veya kod yoktur, ancak Semboller yüklenmedi sayfasında Kaynak kodunu ayrıştır seçeneğini belirleyebilirsiniz.
Aşağıdaki kaynakta zaman uyumsuz bir Görevin (ConsumeThreadPoolThread) zaman uyumlu engelleme işlevini çağırdığını görebilirsiniz.
Not
Bir sinyal alıncaya kadar geçerli iş parçacığı havuzu iş parçacığını engelleyen WaitHandle.WaitOne yöntemini içeren "DoSomething()" yöntemi.
Uygulamaların yanıt hızını geliştirmek için engelleyici zaman uyumlu kodun tüm zaman uyumsuz bağlamlardan kaldırılması önemlidir.