[英]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.