我正在做一个太慢的网络请求。 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请求完成来说太长了。
谢谢!
答案 0 :(得分:3)
该行
responseReader = new StreamReader(webRequest.GetResponse().GetResponseStream());
一次做三件事:
为了改进时序分析,并因此了解瓶颈的位置,首先应该重新编写该部分以分离任务。
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();
}
我知道这不是一个解决方案,但它可能提供更多关于时间丢失的洞察力。
最后的建议,考虑使用异步执行来减少用户所感知的执行持续时间。