2011-02-08 45 views
11

我使用的是Web客戶端下載某網站的某個字符串(只包含純文本,沒有別的),所以我用了DownloadString方法:C#WebClient的作用減緩第一次

WebClient wc = new WebClient(); 
string str = wc.DownloadString("http://blah"); 

它工作正常,但問題是它第一次下載字符串需要很長時間,比如5秒。之後,它工作得很快。爲什麼會發生這種情況,如何解決這個問題?

+0

這是您的Web服務或一些別人的?每次你開始你的客戶時都會發生這種情況嗎? (即使在下載字符串時直接重啓?) – Peter

+0

相關:http://stackoverflow.com/questions/4415443 –

+0

還要注意,即使使用方法的「異步」版本,這也會導致應用程序凍結。這樣的狗屎是如何得到釋放的? –

回答

21

WebClient對象的Proxy屬性設置爲空應該消除您看到的延遲。或者,如果您已將系統配置爲使用代理,則可以使用WebRequest.GetSystemWebProxy進行檢索。第二種方法應該消除這兩種情況下的延遲。

+0

很好的答案!非常感謝你。 –

+0

完美的答案。謝謝。 – Kloar

+0

絕佳的回答。謝謝! –

3

那麼,它第一次需要做DNS查找並連接到主機 - 之後,在同一個進程中,它可能會重新使用相同的連接。對於第一個要求,任何地方,很可能試圖檢測代理設置等

如果你想看到什麼是真正發生在網絡層,使之慢,我建議你搶Wireshark並用此來監控流量。

6

我注意到了同樣的事情。 DotTrace顯示它花費其大部分時間枚舉代理選項: