我正在使用HttpWebRequest获得一些非常奇怪的行为我希望有人可以帮助我。我有一个控制台应用程序,它通过使用HttpWebRequest对象来检索目标网站的内容来完成一些聚合工作。由于要求的性质,应用程序是多线程的,并尝试在10到30个同时连接之间进行任何操作(我一直在尝试一系列值)。实际的Web请求结构如下:

var req = (HttpWebRequest)WebRequest.Create(url);
WebResponse resp = req.GetResponse();
Stream s = resp.GetResponseStream();
var sr = new StreamReader(s, Encoding.ASCII);
string doc = sr.ReadToEnd();
sr.Close();
resp.Close();
return doc;

无论如何,奇怪的是,在正常情况下,应用程序每分钟实现大约120个请求,但如果我打开Fiddler,它会跳到大约600.使用Windows 7资源监视器我可以看到网络活动相应增加。现在,控制台进程的TCP连接将远程地址列为“IPv4环回”。而不是目标服务器IP地址(预期)。我确实想知道机器允许的最大同时HTTP请求数,但在注册表中更改这个请求似乎没有什么区别。

所以问题是;什么是运行Fiddler突然增加了五倍的吞吐量,我怎么能在机器上本地实现这一点,而无需启动另一个工具?

谢谢!

有帮助吗?

解决方案

看起来我现在已经能够通过在App.config中设置最大连接来获得吞吐量(通过实际打开Fiddler得到的两倍):

<system.net>
  <connectionManagement>
    <add address="*" maxconnection="30" />
  </connectionManagement>
</system.net>

对结果非常满意,但是为什么Fiddler开放会如此戏剧性地改变结果仍然有点神秘。

其他提示

我立即注意到的一件事是你没有使用块实现。这增加了一个可能乘以请求数的随机因子,所以我建议你解决这个问题:

var req = WebRequest.Create(url);
using (WebResponse resp = req.GetResponse())
{
    using (Stream s = resp.GetResponseStream())
    {
        using (var sr = new StreamReader(s, Encoding.ASCII))
        {
            return sr.ReadToEnd();
        }
    }
}

接下来,FYI,Fiddler充当代理人。如果您的默认代理设置为使用脚本来设置代理配置,那么我想知道运行Fiddler是否可能无法删除执行脚本设置所需的时间。这可能只发生一次,而不是每次请求。

我遇到了与你类似的问题,想分享我的决议。

简而言之,我有一个控制台程序正在发出HTTP请求,并且会在15分钟左右后超时。但是,如果我使用Fiddler,那么即使让它连续运行几天,我也从未经历过超时。

我尝试在App.config中设置maxconnections属性,但这似乎没有任何帮助。然后我进入了每个对HttpWebRequest,HttpWebResponse的引用,以及用于使用块在这些对象中读/写数据的流对象。

似乎完成了这个伎俩。我已经跑了将近24小时,没有超时,没有Fiddler跑。

您查询的方式导致为每个调用创建一个新会话,这是开销,可能是fiddler将会话添加到您的查询....

private static CookieContainer _cookieContainer = new CookieContainer();

_httpWebRequest.CookieContainer = _cookieContainer; //回收cookiecontainer

我们有同样的问题, 将您的httpWebRequest.PreAuthenticate设置为true。

你不应再有401响应了,所以你会打开更少的连接...

我遇到了同样的问题。我下载了这个: http://www.wowinterface.com/downloads/info13581-LeatrixLatencyFix.html 这是HttpWebRequest性能的原因。它修改了TCPAckFrequency并完全搞乱了一切。我删除了它,现在它工作了。

对我来说,我正在设置 request.ProtocolVersion = HttpVersion.Version10;

此默认设置为HttpVersion.Version11。当我将其设置回默认值时,我的请求在没有fiddler的情况下变得更快。

我希望这可以帮助别人,我整个上午都把它弄清楚了!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top