我正在使用开源库连接到我的网络服务器。我担心网络服务器运行速度极慢,然后我尝试在 Ruby 中进行简单的测试,得到了这些结果
Ruby 程序:10 个 HTTP 需要 2.11 秒
获取
Ruby 程序:100 个 HTTP 需要 18.13 秒
获取
C# 库:10 个 HTTP 需要 20.81 秒
获取
C# 库:100 个 HTTP 需要 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 秒以上才能完成,而 Ruby 程序发出 1 个请求需要 0.3 秒。我也在 127.0.0.1 上进行所有这些测试,因此网络带宽不是问题。
是什么导致了如此巨大的减速?
UPDATE
查看更改后的基准测试结果。我实际上测试了 10 个 GET,而不是 100 个,我更新了结果。
我发现网络请求缓慢的罪魁祸首是代理属性。如果在调用 GetResponse 方法之前将此属性设置为 null,则查询将跳过代理自动检测步骤:
request.Proxy = null;
using (var response = (HttpWebResponse)request.GetResponse())
{
}
代理自动检测在返回响应之前最多需要 7 秒的时间进行查询。有点烦人的是,HttpWebRequest 对象默认设置了此属性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)