WebRequests很慢(需要4秒)我如何加快速度?

时间:2010-03-04 23:20:19

标签: c# asp.net asp.net-mvc httpwebrequest performance

我正在做一个太慢的网络请求。 GetResponseStream()需要大约3.2秒,ReadToEnd()需要0.8秒。

如果我在网络浏览器中运行相同的请求,我会在不到一秒的时间内收到回复...我想知道我能做些什么来加快请求速度以及可能导致速度慢的原因?

根据我在这里看到的其他问题,我在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请求完成来说太长了。

谢谢!

1 个答案:

答案 0 :(得分:3)

该行

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

一次做三件事:

  1. 它从数据中获得响应。
  2. 它从WebResponse对象获取响应流。
  3. 打开流。
  4. 为了改进时序分析,并因此了解瓶颈的位置,首先应该重新编写该部分以分离任务。

    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();
    }
    

    我知道这不是一个解决方案,但它可能提供更多关于时间丢失的洞察力。

    最后的建议,考虑使用异步执行来减少用户所感知的执行持续时间。