2010-03-22 4 views
10

제한된 수의 동시 웹 요청을 만드는 클라이언트가 있습니다. 이 목적으로 WebClient를 사용합니다. 현재 WebClient-s 풀을 보유하고 있으며 한 번 만들어서 유휴 상태 인 것을 사용합니다.WebClient 구축 오버 헤드

이 접근법은 다소 번거로워지고 있습니다. 미리 구성된 WebClient 인스턴스를 수집하는 데 어떤 이점이 있는지 궁금한 점이 있습니까? 아니면 빠르게 작성하는 것이 그리 큰 문제는 아니겠습니까? 그래서 더 당신이 풀을 갖는별로 혜택이

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

:

답변

11

처음에는 WebClient 풀을 보유하게 되었습니까? 그들은 작고 값싼 물건입니다. 이것이 필요하고 유익하다는 것을 측정하여 결정 했습니까? 나는 그렇지 않다고 생각하니?

개체 인스턴스화는 거의 항상 저렴합니다. HTTP 연결도 비쌉니다. WebClient 풀은 조숙 한 최적화입니다. 필요가 없습니다. 원하는만큼 많이 만들 수 있습니다.

+4

글쎄, 그건 내가 물어 보는 질문이었다. 답변 해 주셔서 감사합니다. : p – Barguast

+1

"객체 인스턴스화는 거의 항상 저렴합니다." 그건 사실이 아니야. 어쩌면 비즈니스 또는 WCF 작업에 비해 상대적으로 저렴하지만 성능에 중요한 애플리케이션은 매우 중요합니다. 얼마 전에 C#에서 많은 "간단한"객체 초기화로 일부 응용 프로그램을 만들었습니다. 그렇다면 C로 다시 작성하고 C에서 다시 작성한 후 "단순한"개체 초기화 (개체 재사용)없이 3 배 성능 향상을 얻었으며 C#에서 12 배인 3 배 성능 향상 (오래된 C 버전)을 얻었습니다. 별로 요? –

8

은 반사판에 따르면 웹 클라이언트 수행의 생성자이없는 모든 것을.

+6

다른 곳에서는 값 비싼 지연 초기화가있을 수 있습니다. – usr

+0

또한 'WebClient'는 '구성 요소'이며 'IDisposable'입니다. – AbleArcher

0

.NET 4.0을 사용하는 경우 웹 요청을 병렬 처리 할 수 ​​있습니다. this을 확인하십시오.

그러나 실제 질문에 대해서는 다른 인스턴스에서 해당 인스턴스를 다시 사용할 필요가없는 경우 Array에 WebClient의 인스턴스를 저장하지 않겠습니다. 목적과 용도에 따라 String Dictionary가있는 Request Pool을 가질 수 있습니다.

그런 다음 여러 인스턴스가있는 대신 WebClient를 다시 사용하십시오.