我正在使用一个开源库来连接我的open服务器。我担心was服务器运行非常慢,然后我试着用Ruby做了一个简单的测试,得到了以下结果
HTTP程序: 10次
GET需要2.11秒
Ruby程序:每100个HTTP GET需要18.13秒
C#库: 10次HTTP GETs需要20.81秒
C#库:每100个HTTP GETs需要36847.46秒
我已经分析并发现问题出在这个函数上:
private HttpWebResponse GetRawResponse(HttpWebRequest request) {
HttpWebResponse raw = null;
try {
raw = (HttpWebResponse)request.GetResponse(); //This line!
}
catch (WebException ex) {
if (ex.Response is HttpWebResponse) {
raw = ex.Response as HttpWebResponse;
}
}
return raw;
}
标记的行需要超过1秒才能完成,而发出1个请求的ruby程序需要.3秒。我还在127.0.0.1上做了所有这些测试,所以网络带宽不是问题。
是什么导致了这种巨大的减速?
更新
查看更改后的基准测试结果。我实际上测试了10个GET,而不是100个,我更新了结果。
发布于 2010-08-31 03:08:58
我发现导致web请求缓慢的主要原因是代理属性。如果在调用GetResponse方法之前将此属性设置为null,则查询将跳过代理自动检测步骤:
request.Proxy = null;
using (var response = (HttpWebResponse)request.GetResponse())
{
}
代理自动检测在返回响应之前最多需要7秒进行查询。这个属性在默认情况下为HttpWebRequest对象设置为on,这有点让人恼火。
发布于 2010-03-26 06:16:22
这可能与您同时打开多个连接的事实有关。默认情况下,打开的HTTP连接的最大数量设置为2。尝试将此代码添加到您的.config文件中,看看是否有帮助:
<system.net>
.......
<connectionManagement>
<add address="*" maxconnection="20"/>
</connectionManagement>
</system.net>
发布于 2013-01-16 00:26:30
我在一个VB.Net MVC项目中遇到了类似的问题。
在我的本地pc (Windows7)上,命中页面请求的时间不到1秒,但在服务器(Windows Server2008 R2)上,每个页面请求需要20+秒。
我尝试了将代理设置为null的组合
System.Net.WebRequest.DefaultWebProxy = Nothing
request.Proxy = System.Net.WebRequest.DefaultWebProxy
更改配置文件,方法是添加
<system.net>
.......
<connectionManagement>
<add address="*" maxconnection="20"/>
</connectionManagement>
</system.net>
这仍然没有减少服务器上缓慢的页面请求时间。最后,解决方案是在服务器本身的IE选项中取消选中“自动检测设置”选项。(在Tools -> Internet Options下,选择Connections选项卡。按LAN设置按钮)
在服务器上取消选中此浏览器选项后,所有页面请求时间立即从20+秒降至1秒以下。
https://stackoverflow.com/questions/2519655
复制相似问题