2013-04-13 3 views
3

이 비동기로 실험 중이며 C#을 기다리고 있습니다. 이것은 내 코드C# Async가 얼마나 비싸며 최근에

private async void button1_Click(object sender, EventArgs e) 
    { 
    textBox1.Text = string.Empty; 

    var client = new WebClient(); 

    var sw = Stopwatch.StartNew(); 

    var downloadStringTask = client.DownloadStringTaskAsync("http://www.google.com"); 

    textBox1.Text += "Downloading string async "+sw.ElapsedMilliseconds; 
    sw.Restart(); 

    await downloadStringTask; 

    textBox1.Text += Environment.NewLine + "Downloaded "+sw.ElapsedMilliseconds; 
    sw.Stop(); 
} 

이며,이 출력 메신저 실제 다운로드가 <1 second 복용으로이 만 DownloadStringTaskAsync() 어디 실행 주위 5.6 Seconds를 취하고있다 부르심을 의미 textbox1.text

Downloading string async 5698 
Downloaded 666 

점점. 이 방법을 사용하는 이유는 스레드 자원을 절약하기 위해서입니다.

이것이 사실이라면이 WebClient 클래스 메서드를 사용해야하는 실제 사례가 있습니까? 아니면 완전히 잘못된 용어로 생각하고 있습니까?

+0

흠, 한 번만 측정하면 오해의 소지가있는 숫자가 발생할 수 있습니다. – Patrick

+0

@ 패트릭 저는 ​​나중에 컨트롤러를 만드는 웹 응용 프로그램에서 이것을 사용하려고했습니다. –

+2

데이터 다운로드 시간뿐만 아니라 시간도 걸렸습니다. 첫 번째 다운로드에 필요한 DNS 및 시간을 해결하는 데 도움이됩니다. 다른 전화를해야한다고 제안합니다. 이 시간과 다른 결과가 나오며 dns가 이미 확인되고 캐시되고 페이지도 캐싱됩니다. –

답변

3

처음으로 약 300msec가 발생합니다. 그 후 매회 0msec가 발생합니다. 내가 기대하는 것. 코드를 처음 사용할 때는 항상 오버 헤드가 있습니다. 최소한 System.Net 코드가 프로그램에로드되고 초기화되는 데 드는 비용을 측정하고 있습니다. WebClient는 약간의 오버 헤드가있는 것처럼 보입니다. 예를 들어 레지스트리를 통해 웹 프록시를 검색 할 때 예외가 발견되어 처리되는 것을 볼 수 있습니다. 무언가를하기 전에 수행해야하는 기본 사항은 비동기 적으로 수행 할 수 있습니다.

여전히 5.7 초는 매우 긴 시간입니다. 당신은 환경적인 것들, 당신이 뭔가 인터넷을하고있을 때마다 관여하기를 원하는 기계의 다른 부분을보아야 만합니다. 해당 웹 프록시와 마찬가지로 자동 구성으로 설정 될 수 있으며 시간이 오래 걸릴 수 있습니다. 또는 아웃 바운드 IP 주소를 사용하기 시작한 것에 대해 맬웨어 방지 소프트웨어 또는 방화벽이 흥분하는 것. Etcetera, 네트워킹과 관련된 많은 움직이는 부분은 결코 같지 않습니다.

+0

+1입니다. .NET은 동기식 프록시 자동 검색 (DNS 요청, 프록시 스크립트 다운로드, AppDomain 회전으로 자바 스크립트를 일리노이로 컴파일, 실행)과 DNS 조회 (DNS 탐색을 포함 할 수 있음)를 항상 수행합니다. 따라서 프록시/DNS 문제가있는 경우 "비동기"HTTP 메소드가 갑자기 비동기 적이 지 않습니다. :( –

2

설정 시간을 측정하고 있습니다. 내 컴퓨터 (인터넷 연결)에서 첫 번째 호출이 생성

Downloading string async 2636 // Varies wildly, can be up to 15s on some runs. 
Downloaded 385 

을 후속 호출이 지속적으로 생산하는 동안 :

다른 사람이 말했듯이
Downloading string async 0 
Downloaded 289 // With small variations. 
+0

나중에 이것은 여러 번 시도한 후에 발생합니다. 그러나 정확하게 설정 시간은 무엇입니까? –

0

, 당신이 측정하고 한 번 설치 비용을, 그러나 '한 번 이상 실행'에 대한 대안으로 특정 웹 클라이언트를 '워밍업'할 수 있습니다. 그런 다음 초기 측정 초기 웹 클라이언트가 포함되지 않습니다

var client = new WebClient(); 

// different site, to help avoid pre-filling any caches involved 
client.DownloadData("http://www.microsoft.com/"); 

var sw = Stopwatch.StartNew(); 

:

예를 들어,이 두 라인 사이에이 같은 아마 뭔가

var client = new WebClient(); 

var sw = Stopwatch.StartNew(); 

전화 * 다운로드 A (동기)를 추가 설치 및 첫 번째 실행도 정확한 타이밍을 가져야합니다 (HTTP 200 결과가 매번 가정되고 로컬 캐시 또는 304에서 제공되지 않음).

관련 문제