Bir ASP.Net web uygulamasındaki her isteğin, bir isteğin başında bir Oturum kilidi aldığını ve isteğin sonunda bunu serbest bıraktığını keşfettim!
Bunun etkileri sizin için kaybolursa, ilk başta benim için olduğu gibi, bu temelde aşağıdakiler anlamına gelir:
Bir ASP.Net web sayfasının yüklenmesi uzun zaman alıyor olabilir (belki de yavaş bir veritabanı çağrısı veya herhangi bir şeyden dolayı) ve kullanıcı beklemekten bıktıkları için farklı bir sayfaya gitmek istediklerine karar verir, YAPAMAZ! ASP.Net oturum kilidi yeni sayfa isteğini, özgün istek acı yavaş yavaş bitene kadar beklemeye zorlar. Arrrgh.
Bir UpdatePanel yavaş yüklendiğinde ve kullanıcı UpdatePanel'in güncellenmesi bitmeden önce farklı bir sayfaya gitmeye karar verir ... YAPAMAZ! ASP.net oturum kilidi yeni sayfa isteğini özgün isteği acı yavaş yavaş bitene kadar beklemeye zorlar. Çift Arrrgh!
Peki seçenekler nelerdir? Şimdiye kadar buldum:
- ASP.Net'in desteklediği bir Özel SessionStateDataStore uygulayın. Kopyalamak için çok fazla şey bulamadım ve yüksek riskli ve dağılması kolay görünüyor.
- Devam eden tüm istekleri takip edin ve aynı kullanıcıdan bir istek gelirse, orijinal isteği iptal edin. Bir tür aşırı gibi görünüyor, ama işe yarayacaktı (sanırım).
- Oturum'u kullanma! Kullanıcı için bir tür duruma ihtiyacım olduğunda, bunun yerine Önbellek'i ve kimliği doğrulanmış kullanıcı adındaki anahtar öğeleri veya böyle bir şeyi kullanabilirim. Yine aşırı gibi görünüyor.
ASP.Net Microsoft ekibinin 4.0 sürümünde bu kadar büyük bir performans darboğazı bırakacağına gerçekten inanamıyorum! Açık bir şey mi kaçırıyorum? Oturum için ThreadSafe koleksiyonu kullanmak ne kadar zor olurdu?