在使用HttpWebRequest建立http請求時,第一次串連的響應速度會很慢,而且還會出現請求逾時的錯誤,這裡大概有十幾秒鐘的等待時間,但是一旦第一次運行成功後,下面的請求頁面速度就會很快了。
網上尋找了下,發現和我遇到同樣問題的網友也有很多。
網友小A說:
“第一次用HttpWebRequest請求串連非常慢,但是只要第一次串連getresponse或者getrequeststream()成功了,後面就很快。不過只要一重新撥號,就又要很長時間才能擷取getresponse()或者是getrequeststream()。
求怎麼樣才能解決這個問題,即使第一次慢點,但是等後面網路重撥後,可以快速的連結上,擷取響應。
用迴圈套用他 第一次的時候超級慢,然後後面跟著很快,但是只要斷開網路連接後重新串連後第一次就又很慢了。求解~~~”
網友小B說:
“今天把我以前做的一個程式升級到了.NET 4.0的版本,裡面有一段通過HttpWebRequest擷取html的代碼,第一次運行特別慢,後續運行就快了。在網上搜了一下,找到了原因:.NET4.0中的預設代理是開啟的,使用預設代理時,只有等待逾時後才會繞過代理,從而導致第一次串連特別慢。(不知道微軟為什麼要把這個開啟)”
【問題所在】
.NET4.0或3.5中的預設代理是開啟的,而我並沒有設定!故只有等待逾時後才會繞過代理,這就阻塞了.
【參考資料】
"It's not set at all in app.cong or machine.config. Hmm. If I'm reading the
MSDN docs right, the default for defaultProxy.enabled is TRUE if the element
isn't specified at all. That would be consistent with my observations.
"
http://msdn2.microsoft.com/en-us/library/kd3cf2ex(VS.80).aspx
【問題引申】(參考)
如果在其它版本的.NET環境中遇到類似問題,不妨嘗試
WebClient.Proxy = null;
或
HttpWebRequest.Proxy = null;
加了上面這一句 HttpWebRequest.Proxy = null; 將其預設代理設定為空白時,果然 HttpWebRequest在第一次運行時不慢了,響應速度恢複了正常。