2010-03-04 62 views
5

我正在做一個太慢的Web請求。它需要大約3.2秒GetResponseStream()和.8秒鐘ReadToEnd()WebRequests很慢(需要4秒)我如何加快速度?

如果我在網絡瀏覽器中運行相同的請求,我得到的響應不到一秒鐘......我想知道我能是否加快請求的速度,以及可能導致速度緩慢的原因?

根據我在這裏看到的其他問題,我禁用了app.config +啓用的最大連接代理,以防萬一(它仍然很慢)。我添加的部分爲:

<system.net> 
<defaultProxy enabled="false"> 
    <proxy/> 
    <bypasslist/> 
    <module/> 
</defaultProxy> 
<connectionManagement> 
    <add address="*" maxconnection="65000" /> 
</connectionManagement> 

這裏是什麼樣的代碼看起來像,什麼是慢的截圖:

alt text http://i45.tinypic.com/2uy1xc4.jpg

我想感謝所有幫助... 4 -8秒對於用戶等待ajax請求完成太長。

謝謝!

+0

(並不是說它會改變響應時間,但爲什麼你會重新拋出你剛纔在異常中被捕獲的東西?) –

+0

你確定瀏覽器不只是緩存它嗎?仍然有趣的問題! –

+0

那麼這個方法來自一個庫,我沒有改變那部分,因爲拋出的錯誤被記錄下來。 – rksprst

回答

3

responseReader = new StreamReader(webRequest.GetResponse().GetResponseStream()); 

做三件事情在一次:

  1. 它從數據的響應。
  2. 它從WebResponse對象獲取響應流。
  3. 它打開流。

爲了改進時序分析,並因此瞭解瓶頸在哪裏,首先應重新編碼該部分以分離任務。

HttpWebResponse response = WebRequest.GetResponse(); 
Stream s = response.GetResponseStream(); 
reader = new StreamReader(s); 

finally塊,你只需要關閉的讀者,因爲這也將關閉底層流。讀者可以考慮使用using塊,而不是明確關閉流。

using (Stream s = response.GetResponseStream()) { 
    StreamReader reader = new StreamReader(s); 
    responseData = reader.ReadToEnd(); 
} 

我知道,這不是一個解決方案,但也許它提供了更多的有識之士來這裏的時候丟失。

最後的建議,考慮使用異步執行來減少用戶感知的執行持續時間。

+0

+1使用'使用' – Nicolas78

相關問題