SORU
12 HAZİRAN 2013, ÇARŞAMBA


BeginProcessRequest ne()?

NewRelic sunucu tarafı uygulama izlemelerini sağlamak için kullanıyoruz.

Bizim bazı uygulamalar sürekli yönteminde 100 MS civarında System.Web.Mvc.MvcHandler.BeginProcessRequest() harcama olduğunu fark etmişsinizdir.

Bu herhangi bir özel denetleyicisi kod denir önce olur ayrı ayrı ve kümülatif olarak değil kaydedilir) - bu yöntem çok fazla zaman harcama olacak neden açık değil.

Ne tür şeyler MVC bu yöntemde yapacak? Bu sadece istek kuyruk olabilir mi?

[EDİT:]Şüpheli olarak Scalayer cevabı aşağıda doğruydu. Ve bütün oturum bizim bağımlılıkları kaldırdık optimize edilmiş ve uygulama ölçülebilirlik ve kararlılık büyük bir artış gördüm

CEVAP
12 HAZİRAN 2013, ÇARŞAMBA


Görme ihtimalin olan şeyleri sık iplik çeviklik olarak adlandırılır .NET.

Ne olursun muhtemelen görme kadarıyla sonuçlar altında topikal etiket (Yani Uygulama kodu System.Web.HttpApplication.BeginRequest()) bir iş parçacığı çeviklik sorun; çoğu zaman görüşürüz burada değil mutlaka kod olmak idam ama web içeriği için bekleyen konuları yayımlanacak geri gelen bir okuyucu-yazıcı kilit.

Application_BeginRequest() "pause" yığın web ASP.NET içinde oldukça yaygındır. BeginRequest uzun yükleme süreleri görünce genel olarak, özellikle IO ve oturum tabanlı işlemler ile ilgili ASP.NET iplik çeviklik ve/veya iplik kilitler ile başa çıkmak. Kötü bir şey bu, bu nasıl adil değil .net iş parçacığı eşzamanlı kalır emin olur.

Zaman boşluğu genellikle BeginRequest ve PreRequestHandlerExecute arasında oluşur. Eğer uygulama oturumu için birkaç şey yazma sonra ise HttpContext.Current.Session okur-yazar bir kilit sorunu ASP.NET .

Eğer bu karşı karşıya olabilir olan bir sorunu olup olmadığını görmek için iyi bir yol parçacığı Kimlikleri kontrol etmek eğer çeviklik bir sorun olup olmadığını görmek için olacak - Kimlikleri belirli bir istek için farklı olacaktır.

Örneğin. Ayıklarken, belki de 8* *senin için aşağıdakileri ekleyebilirsiniz:

protected void Application_BeginRequest(Object sender, EventArgs e) { 
      Debug.WriteLine("BeginRequest_"   Thread.CurrentThread.ManagedThreadId.ToString()); 
   }

Hata ayıklama çıkışı penceresinde (Visual Studio: Görünüm ^ açalım< . Çıkış, "" "" açılır) çıkış gösterir. hata Ayıklama seçin

Ayıklarken, uzun zaman görmediğiniz bir sayfa çarptı. Sonra çıktı günlük görünüm - eğer birden fazla kimlik görürseniz o zaman bu muzdarip olabilir.

Bu gecikme bazen ama diğer zamanlarda görebilirsiniz yüzden, uygulama kodu oturumu biraz farklı kullanıyor olabilir ya da oturum veya IO işlemleri daha yüksek veya sayfadan sayfaya daha düşük olabilir.

Eğer bu durumda bazı şeyleri şeyleri oturum sitesinde veya belirtilen her sayfa nasıl kullanıldığına bağlı olarak hızlandırmak için ne yapabilirim.

Sayfa için oturum değiştirmeyin:

   <% @Page EnableSessionState="ReadOnly" %>

Sayfa için oturum durum: kullanmayın

<% @Page EnableSessionState="False" %>

Eğer app oturum (web.kullanıyor mu yoksa config):

<configuration>
    <system.web>
      <sessionState mode="Off" />
    </system.web>
</configuration>

O yüzden aşağıdaki örnek alalım:

Kullanıcı bir sayfayı yükler, ilk isteği yükleme ASP.NET oturumu sayfa isteği ilk sayfa kadar beklemek yeni yük neden kilit zorlayacak istek tamamlanmadan önce başka bir sayfaya gitmeye karar verir. ASP.NET MVC ile her eylem senkronizasyon için kullanıcı oturumu kilitler; aynı soruna neden.

Tüm bu zaman aldı için kilit serbest olacak rapor üzerinden yeni bir kalıntı söz değil, olanlar kullanıcı oturumu terk edilmiş ve iplik dönüyor arayan bir kullanıcı artık yok.

Bu arada UpdatePanel denetim neden aynı davranış

http://msdn.microsoft.com/en-us/magazine/cc163413.aspx

Ne yapılabilir:

Bu kilit sorun, Microsoft SessionStateUtility sınıfı vardır nedenlerinden biridir

http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionstateutility.aspx

Eğer burada görüldüğü gibi, bu sorun karşısında bir varsayılan davranışı geçersiz kılabilirsiniz, böylece bu Uygulama:https://github.com/angieslist/AL-Redis Redis

Varsayılan devlet kuruluşu tarafından kullanılan birçok seçenek vardır .net tabanlı web siteleri. Ama genel olarak bu işlem zaman iş parçacığı kilitli ve sunucuya istekleri tamamlanması planlanan varlık olduğunu gösterir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Andrey Menshikov

    Andrey Mensh

    28 Ocak 2012
  • chickenby

    chickenby

    2 HAZİRAN 2008
  • NLthomas21

    NLthomas21

    20 Mayıs 2008

İLGİLİ SORU / CEVAPLAR