2010-03-22 35 views
10

Sınırlı sayıda eşzamanlı web isteği yapan bir müşterim var. Bu amaçla WebClient kullanıyorum. Şu anda bir kez oluşturduğum ve hangisinin boş olduğunu kullandığım bir WebClient-s havuzum var.WebClient konstrüksiyon yükü

Bu yaklaşım biraz zorlaşıyor, ve önceden hazırlanmış WebClient örneklerinin bir koleksiyonuna sahip olmanın herhangi bir yararı olup olmadığını merak ediyorum veya bunları anında oluşturmak çok fazla sorun olmaz mı? Yani bir havuz olan pek faydası var

public WebClient() 
{ 
    this.m_Encoding = Encoding.Default; 
    this.m_ContentLength = -1L; 
} 

:

cevap

11

Yeryüzünde neden WebClients havuzunuz var? Onlar minik, ucuz nesnelerdir. Bunun gerekli ve faydalı olduğunu ölçerek belirlediniz mi? Var değil mi?

Nesne somutlaştırması neredeyse her zaman ucuzdur. HTTP bağlantıları da pahalı değil. Bir WebClient havuzu, erken bir optimizasyon. Buna gerek yok - istediğiniz kadar yaratmak için çekinmeyin.

+4

Evet, sorduğum soru buydu - bir havuza sahip olmaya değer. Cevapladığın için teşekkürler. : p – Barguast

+1

"Nesne somutlaştırması neredeyse her zaman ucuzdur." Bu doğru değil. Belki nispeten ucuz, iş veya WCF görevlerine göre, ancak çok önemli olan perfomance kritik uygulama için. Bir süre önce C# 'da bir çok "basit" nesne başlatma ile bazı uygulamalar yaptım. Sonra C 'de yeniden yazdım ve C' yi yeniden yazdıktan sonra ancak "basit" nesneler başlatmadan (nesneleri yeniden kullanmadan) bu kez 4x performans artışı elde ettim ve 3X perfomance grouth (göreceli olarak eski C versiyonu) C# üzerinde 12X oldu. Fazla değil? –

8

Reflektör göre WebClient'ın yapar yapıcısı şudur hepsi bu.

+6

Başka yerlerde pahalı tembel başlatma olabilir. – usr

+0

Ayrıca, 'WebClient', 'IDisposable' olan bir Bileşen'dir. – AbleArcher

0

.NET 4.0 kullanıyorsanız, Web İsteklerini paralel hale getirebilirsiniz. this çıkışını kontrol edin.

Ancak asıl soruda, başka yerlerde bu örneği yeniden kullanmaya gerek duyulmuyorsa WebClient örneklerini bir Dizide saklamam. Amaca ve kullanım türüne bağlı olarak, String Sözlüklü bir İstek Havuzuna sahip olabilirsiniz.

Ve sonra birden çok örneğe sahip olmak yerine bir WebClient'i yeniden kullanın.