簡體   English   中英

為什么在使用Fiddler時HttpWebRequest對象的性能會提高?

[英]Why does the performance of the HttpWebRequest object improve while using Fiddler?

我正在使用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跑。

對我來說,我正在設置request.ProtocolVersion = HttpVersion.Version10;

默認設置是HttpVersion.Version11。 當我將其設置回默認值時,我的請求在沒有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並完全搞亂了一切。 我刪除它,現在它工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM