IHttpHandler.IsReusable için kullanım nedir?


105

Bir yazıyorum IHttpHandlerve bir IsReusableözellik uygulamam gerekecek . Ben baktığınızda MSDN belgelerine diyor:

Başka bir isteğin IHttpHandler örneğini kullanıp kullanamayacağını gösteren bir değer alır.

Bu pek yardımcı olmuyor. Hangi durumlarda yeniden kullanılabilir bir işleyici kullanmalıyım ve hangi durumlarda yeniden kullanılmamalıdır?

Takip soruları:

  1. Yeniden kullanım nedir?
  2. Durumunu (yani sınıf değişkenlerini) ne zaman koruyabilirim Reusable = true?


"Yeniden kullanım", işleyicinin belirli bir örneğiyle birden fazla isteği işlemek anlamına gelir. Oturumda herhangi bir şey saklayabilirsiniz - işleyici örneği serbest bırakıldığında etkilenmeyecektir.
IrishChieftain

@IrishChieftain Sanki .Net'in bir çanta dolusu HttpHandler tutması, birini seçip onu bir bağlamla beslemesi gibi mi?
Kees C.Bakker

1
@IrishChieftain Şu anda bazı günlük bilgilerinin basit bir yayıncısı için kullanıyorum. Ancak, IHttpHandlers'ı ne zaman ve nasıl kullanacağımı anlamak için çıkarımların ne olduğunu öğrenmeye çalışıyorum. Çoğu kişi tarafından unutulmuş bir özelliktir.
Kees C.Bakker

Yanıtlar:


94

Bu özellik, aynı IHttpHandler örneğiyle birden çok isteğin işlenip işlenemeyeceğini gösterir. Varsayılan olarak, bir istek ardışık düzeninin sonunda, HttpApplication'ın handlerRecycleList'ine yerleştirilen tüm http işleyicileri null olarak ayarlanır. Bir işleyici yeniden kullanılabilirse, null olarak ayarlanmayacak ve örnek sonraki istekte yeniden kullanılacaktır.

Ana kazanç performanstır, çünkü çöp toplamak için daha az nesne olacaktır.
Yeniden kullanılabilir işleyici için en önemli sorun, iş parçacığı için güvenli olması gerektiğidir. Bu önemsiz değildir ve biraz çaba gerektirir.

Kişisel olarak, yalnızca yönetilen kaynakları kullanıyorsanız varsayılan değeri (yeniden kullanılamaz) bırakmanızı öneririm, çünkü Çöp Toplayıcı bunları kolayca işlemelidir. Yeniden kullanılabilir işleyicilerden elde edilen performans kazancı, bulunması zor iş parçacığı hatalarının ortaya çıkması riskiyle karşılaştırıldığında genellikle ihmal edilebilir düzeydedir.

İşleyiciyi yeniden kullanmaya karar verirseniz, durumu sınıf değişkenlerinde korumaktan kaçınmalısınız çünkü işleyici örneğine aynı anda erişilirse, birden çok istek değerleri yazacak / okuyacaktır.


1
Sınıf değişkenlerinde durumu korumaktan kaçınmak için son öneriniz biraz kafa karıştırıcı. IsReusable'ı false olarak ayarladığınızı varsayarsak, başka bir isteğin (eşzamanlı olsun veya olmasın) bu HttpHandler'ın aynı örneğine erişme ve bu nedenle sınıf değişkenlerinde durumu korumak güvenli olmaz mıydı?
Ben Amada

2
Elbette. Son tavsiyeyi, yalnızca IHttpHandler yeniden kullanıldığında uygulanabilir olduğunu vurgulayarak yeniden ifade ettim. Açıklama için teşekkürler, Ben!
Branislav Abadjimarinov

7
Değeri ne olursa olsun, set IHttpHandlerile birçok s uyguladım ve hiçbir sorun yaşamadım. Akılda tutulması gereken en önemli şey, sınıfa dahil edilen herhangi bir değişkene sahip olmak değil, işlevlerinizde yerel değişkenler kullanmaktır. IsReusabletrue
dana

6
Harika açıklama. Açık ve konuya. MSDN makalelerinin bu kadar kısa olmasını dilerdim.
AlexVPerl

1
@Branislav - Cevabını doğru anladıysam. Farklı evrelerin eşzamanlı olarak işleyicinin farklı örneklerini kullanması mümkün değildir, aynı zamanda farklı evrelerin aynı anda işleyicinin SAME örneğini yürütmesi de mümkündür?
Ian

11

Görünüşe göre, bu işleyiciyi bellekte tutar ve birden çok isteği işleyebilir. Yanlış olarak ayarlandığında, gelen her istek için işleyicinin yeni bir örneğini oluşturması gerekir.

Doğru kullanılmadığında ne olacağını gösteren bir soru:

HttpHandler Kullanarak Veri Tabanlı Görüntüleri Akışı


Cevabınızı destekleyen bazı belgeleriniz var mı?
Kees C.Bakker

4
Sizin gibi MSDN'de tatmin edici bir belge bulamadım, bu yüzden bir veritabanından bir E-Ticaret sitesinin bir sayfasına resim yüklemeyi test etmem ve sonra ne olduğunu gözlemlemem
gerekti

5

İşleyiciyi geri dönüştürmek, her istek geldiğinde yenisini kullanmaktan daha ucuzdur ve sunucu daha az bellek tüketerek GC'nin gerçekleştirmesi gereken işi kolaylaştırır. İşleyici, yeni bir istekle ilgilenmenin sorunlu olmayacağı bir durumdaysa (yani, işleyici örneğindeki herhangi bir durum sıfırlandı) , o zaman yeniden kullanılabilir olarak nitelendirilmelidir.

DÜZENLE

Cevabımın yeniden kullanımın ne olduğunu doğru şekilde tanımladığından emin değilim. Aslında eşzamanlı yeniden kullanıma izin verir, bu nedenle etkin durum en iyi şekilde önlenebilir veya iş parçacığı güvenli bir şekilde dikkatlice yönetilebilir.


Ben de öyle düşünürdüm. Haklısın, asıl (temel) soru şudur: 'yeniden kullanım nedir?'
Kees C. Bakker
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.