2014-10-16 2 views
-1

요청을 만들어서 문자열에 응답하는 가장 빠른 방법이 뭔지 궁금합니다. webclient는 기본적으로 httpwebrequest의 도우미 클래스입니다.요청을하고 응답을 읽는 가장 빠른 방법 #

내가 묻는 이유는 예를 들어 2000 URL과 같은 응답을 받아야하기 때문입니다. 가능한 한 효율적으로 만들고 싶습니다.

httpwebrequest가 C#에서 가장 빠르다는 것을 알아야합니까? 아니면 다른 것이 있습니까?

감사합니다.

+1

요청을 인스턴스화하거나 응답을 처리하는 데 사용하는 방법은 실제로 네트워크를 통해 요청/응답을 평가하는 것보다 훨씬 빠릅니다. 이는 항상 제한 요소입니다. 다음 요청을 시작하기 전에 하나의 요청이 끝나기를 기다리지 않고 병렬로 처리하십시오. –

답변

0

그것은 당신이 요청을 수행하는 데 사용하는 방법의 성능을 위해 약간의 문제, 그것은 기다리고 그건 시간이 필요해.

여러 요청을 수행하려면 WebClient 클래스의 비동기 메서드를 사용할 수 있습니다. 그렇게하면 한 번에 하나의 응답 만 기다릴 필요가 없습니다.

같은 시간에 실행하려는 합당한 수의 요청을 선택하고 예를 들어 DownloadDataAsync method을 사용하여 요청을 시작하십시오. 응답이 도착하면 DownloadDataCompleted 이벤트 (또는 사용하는 방법에 따라 등가)가 트리거됩니다. 이벤트를 처리하여 다운로드 한 데이터를 가져오고 모두 완료 할 때까지 다른 요청을 시작하십시오.

동일한 도메인의 URL을 요청하는 경우 일반적으로 여러 리소스를 병렬로 요청할 필요가 없습니다. 다른 도메인에서 요청할 경우 더 많은 리소스를 동시에 실행할 수 있습니다.

+0

그것은 단일 도메인에서, 나는 아픈 것 같아요 한 번 모두 그들을 캐시하고 사람이 특정 데이터를 볼 때 특정 캐시 된 데이터를 업데이 트해야합니다. 감사합니다. – user3603865

1

.net 4.5를 사용하는 경우 너겟 패키지 인 최신 http 클라이언트를 사용해 볼 수 있습니다. .Net 4.5+ 비동기 패턴을 사용하므로 스레드를 매우 효율적으로 사용할 수 있습니다.

이 코드는 순진,하지만 당신은 비동기로 수행 할 작업의 힌트를 제공 할 서버의 응답을

public async Task<IEnumerable<HttpResponseMessage>> GetStuffs(IEnumerable<string> uris) 
{ 
    var tasks = new List<Task<HttpResponseMessage>>(); 

    var client = new HttpClient(); 

    foreach (var uri in uris) 
    { 
     var task = client.GetAsync(uri); 
     tasks.Add(task); 
    } 

    Task.WaitAll(tasks.ToArray()); 

    return tasks.Select(x => x.Result); 
} 
+0

그것은 Guffa가 쓴 것과 똑같은 생각을했습니다. 감사. – user3603865

+0

OP의 질문에 대한 대답은 "httpwebrequest가 C#에서 가장 빠르거나 다른 것이 있습니까?" – xmojmr

+0

궁극적으로 대기 중 대부분은 네트워크 전송 지연이 될 것이지만 그 대답은 분명히 다른 것이 있음을 분명히 말합니다. HttpWebRequest는 MS에 의해 HttpClient에 찬성하여 폐기되었습니다. HttpClient는 비동기를 사용하여 성능을 높이기 위해 사소한 다중 작업 기법을 허용합니다. 나는 너의 요점을 잘 모르겠다. –

관련 문제