【问题标题】:WebRequests are slow (taking 4 seconds) how do I speed them up?WebRequests 很慢(需要 4 秒)我如何加快它们的速度?
【发布时间】:2010-03-04 23:20:18
【问题描述】:

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

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

基于我在这里看到的其他问题,我在 app.config 中禁用了代理 + 启用了最大连接数,以防万一(它仍然很慢)。我添加的部分是:

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

下面是代码的截图和慢的地方:

感谢您的帮助... 4-8 秒对于用户等待 ajax 请求完成来说太长了。

谢谢!

【问题讨论】:

  • (并不是说它会改变响应时间,但是为什么要重新抛出刚刚在异常中捕获的内容?)
  • 你确定浏览器不只是缓存它吗?不过,有趣的问题!
  • 这个方法来自一个库,我没有更改那部分,因为记录了抛出的错误。
  • 关于投掷:Michael 想知道您是否确定要使用“throw ex”而不是“throw”,以及您是否知道其中的含义。对您的问题没有帮助,但您也许应该阅读一下。
  • 最大连接数 65000 对您来说很危险,希望这只是您在玩耍时所做的事情。

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


【解决方案1】:

线

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

我知道这不是一个解决方案,但也许它可以更深入地了解时间浪费在哪里。

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

【讨论】:

    猜你喜欢
    • 2010-11-12
    • 2019-02-23
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 2015-07-17
    • 2011-01-17
    相关资源
    最近更新 更多