Http işleyici arayüzünde bool IsReusable'ın önemi


Yanıtlar:


152

Bir işleyici için normal giriş noktası ProcessRequest yöntemidir. Bununla birlikte, sınıf yapıcısında, oluşturulması pahalı olan bazı örnek değerlerini bir araya getiren kodunuz olabilir.

Yeniden Kullanılabilir'i doğru olarak belirtirseniz, uygulama örneği önbelleğe alabilir ve ProcessRequest yöntemini her seferinde yeniden yapılandırmak zorunda kalmadan tekrar tekrar çağırarak başka bir istekte yeniden kullanabilir.

Uygulama, mevcut yükü idare etmesi gereken bu işleyicilerin çoğunu somutlaştıracaktır.

Dezavantajı, gerekli örnek sayısı şu anda mevcut olan örneklerden daha büyükse, daha fazla belleğin kullanılmasına neden olmalarıdır. Tersine, örnek değerleri GC döngülerinde hayatta kalacağından ve sık sık yeniden tahsis edilmelerine gerek kalmayacağından, görünür bellek kullanımlarını da azaltabilirler.

Başka bir uyarı, ProcessRequest yürütmesinin sonunda nesne durumunun, nesneyi yeniden kullanması için başka bir istek için istediğiniz gibi olduğundan emin olmanız gerektiğidir.


2
IsReusable = True belirleyerek elde edilen anahtar optimizasyon olarak nesne yeniden kullanımından bahsediyorsunuz. IsReusable = False ayarı, sunucunun hiçbir zaman işleyicinin birden fazla örneğini başlatmamasına neden olur. IE - eşzamanlı istekleri ortadan kaldırır mı?
Ian

@Yanılsam da yeniden kullanılabilir yanlış olduğunda bunun normal bir sayfa olarak işlev gördüğüne inanıyorum. Yeniden kullanılabilir olduğunda, 2 veya 3 örnekle (yalnızca örnek) 6 eşzamanlı isteği işleyebilir, oysa yeniden kullanılabilir olmadığında 1: 1 örneklere / işlemlere ihtiyaç duyar. Net'in, 1 işçi iş parçacığının durumunu sürekli olarak yenilerken / yeniden başlatırken hepsini işlemeye çalıştığı için isteklerin yığılmasına izin vereceğini hayal edemiyorum.
DavidScherer

47

Ayrıca AnthonyWJones cevabı, HTTP işleyicisi getiri eğer trueiçinIsReusable o zaman tamamen iş parçacığı için güvenli olduğundan emin olmalıdır.

Belgelerde, yeniden kullanılabilir işleyicilerin aynı anda yeniden kullanılamayacağını gösteren hiçbir şey yoktur, ancak mevcut Microsoft uygulamaları bunları yalnızca art arda yeniden kullanıyor gibi görünmektedir. Ancak, en azından teoride, tek bir işleyici örneği birden çok istek tarafından aynı anda yeniden kullanılabilir, bu nedenle diğer eşzamanlı iş parçacıkları tarafından değiştirilebilecek hiçbir veriye güvenmemelisiniz.


Kalın davrandığım için özür dilerim, ama lütfen birisi "bağlam değiştirme" ile ne kastedildiğini açıklayabilir mi? Bir şeylere sesson veya sorgu dizesinden (content.Request.QueryString) erişirseniz, bu yeniden kullanılabilir mi, değil mi?
zod

5
Bağlam değiştirme, bir CPU'nun bir iş parçacığı üzerinde işlemeyi durdurması ve diğerinde işlemeye başlamasıdır. IE, CPU bağlamını bir iş parçacığından diğerine değiştirdi. Bu, PC'lerde sürekli olur, bize çok çekirdekli bilgisayarlar olmadan önce çoklu görev yanılsaması verdi.
Larry Dukek

Herhangi bir zamanda bir bağlam anahtarı olabilir dediğinde anlayamadım . Url yazdığımızda ve enter tuşuna bastığımızda, bu her seferinde bir istek gerçekleştirir. sağ ?

Aynı anda birden fazla kullanıcı bir uygulamayı kullandığında bağlam değiştirme bir sorun olacaktır. Örneğin, iki kullanıcı aynı kaydı aynı anda güncellemek isterse, bağlam anahtarı sorunlara neden olabilir.
Ishmael Smyrnow

7
İş IsReusableparçacığı güvenliğini zorunlu kılma konusundaki bu ifade , AnthonyWJones cevabıyla çelişiyor gibi görünüyor. Üçüncü paragrafını anladığım kadarıyla (Uygulama ... kadar çok sayıda örnek oluşturacaktır), yeniden kullanılabilir bir işleyici örneği eşzamanlı olarak yeniden kullanılmayacak, yalnızca mevcut işlemeyi tamamladıktan sonra yeniden kullanılacaktır. Bu doğruysa, iş parçacığı açısından güvenli olmaya gerek yoktur.
Frédéric

3

Bu örnekte herhangi bir durumu saklamıyorsanız (yani: herhangi bir alanınız yoksa ("sınıf değişkenleri" olarak da bilinir)), onu yeniden kullanırken güvenli olmalısınız.

Güvenli tarafta olmak varsayılan olarak yanlıştır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.