C# 为什么使用Fiddler时HttpWebRequest对象的性能会提高?

C# 为什么使用Fiddler时HttpWebRequest对象的性能会提高?,c#,.net,fiddler,C#,.net,Fiddler,我在HttpWebRequest中遇到了一些非常奇怪的行为,希望有人能帮助我。我有一个控制台应用程序,它通过使用HttpWebRequest对象检索目标网站的内容来执行一些聚合工作。由于需求的性质,该应用程序是多线程的,并尝试进行10到30个同时连接(我已经用一系列值进行了实验)。实际web请求的结构如下所示: var req = (HttpWebRequest)WebRequest.Create(url); WebResponse resp = req.GetResponse(); Strea

我在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突然将吞吐量提高了五倍,这是怎么回事?我如何在机器上实现这一点,而无需启动另一个工具


谢谢

我马上注意到的一件事是,您没有使用块实现。这增加了一个随机性因子,该因子可能会乘以请求的数量,因此我建议您解决以下问题:

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

接下来,仅供参考,Fiddler充当代理。如果您的默认代理设置为使用脚本来设置代理配置,那么我想知道运行Fiddler是否不会减少执行脚本设置所需的时间。这种情况可能只发生一次,而不是每次请求都会发生。

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

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


对结果非常满意,但我还是有点困惑,为什么让Fiddler open如此显著地改变了结果。

我遇到了一个与您类似的问题,希望与大家分享我的解决方案

简而言之,我有一个控制台程序,它发出HTTP请求,大约15分钟后就会超时。然而,若我使用小提琴,那个么我从来并没有经历过超时,即使在连续运行了几天之后

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


这似乎成功了。我已经运行了将近24小时,没有超时,也没有运行Fiddler。

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

试一试

私有静态CookieContainer_CookieContainer=new CookieContainer()

_httpWebRequest.CookieContainer=\u CookieContainer//回收cookiecontainer时,我们遇到了同样的问题, 将httpWebRequest.PreAuthenticate设置为true


您不应该再有401响应,因此您将打开更少的连接…

我也遇到了同样的问题。我下载了这个:
这就是HttpWebRequest性能的原因。它修改了TCPACK的频率,把一切都搞糟了。我删除了它,现在它可以工作了。

对我来说,我设置了
request.ProtocolVersion=HttpVersion.Version10

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


我希望这对其他人有帮助,我花了一个上午才弄明白

我的猜测是默认的maxconnectionperproxy值高于默认的maxconnection值。这是一个救命稻草。谢谢我也有同样的问题。但我有WinForm应用程序。。我找不到如何用winform应用程序解决这个问题。。