2009-06-21 94 views
10

我得到一些非常奇怪的行爲與HttpWebRequest我希望有人可以幫助我。我有一個控制檯應用程序,它通過使用HttpWebRequest對象來檢索目標網站的內容來完成一些聚合工作。由於要求的性質,該應用程序是多線程的,並嘗試在10到30個同時連接之間進行任何操作(我一直在試驗一系列值)。實際的web請求的結構如下:爲什麼使用Fiddler時HttpWebRequest對象的性能會提高?

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請求,但如果我打開了它的提琴手跳轉至約600使用Windows 7資源監視器我可以看到網絡活動相應增加。控制檯進程的TCP連接現在將遠程地址列爲「IPv4環回」,而不是目標服務器IP地址(預期)。我確實想知道機器允許的最大併發HTTP請求數量,但是在註冊表中改變這一點似乎沒有什麼區別。

所以問題是,運行Fiddler是如何突然將吞吐量提高5倍,並且我怎樣才能在機器上實現這一功能,而無需啓動其他工具?

謝謝!

+0

我有同樣的問題。但我有WinForm的應用程序..我找不到如何修復這與WinForm應用程序.. – 2012-11-07 14:06:47

回答

14

看起來像我現在已經能夠得到吞吐量直到通過設置在App.config的最大連接數(加倍,我與小提琴手實際打開獲得):

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

很開心結果,但對於爲什麼開着小提琴手如此戲劇性地改變結果,我仍然有些迷惑。

+5

我的猜測是默認的maxconnectionperproxy值高於默認的maxconnection值。 – EricLaw 2009-06-26 04:31:42

5

有一件事我立刻注意到的是,您不使用的塊實施。這增加了可能受請求數乘以一個隨機的因素,所以我建議你解決這個問題:

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是否可能不會消除執行腳本安裝所需的時間。這可能只發生一次,而不是每次請求。

+0

好點約翰,感謝提高。 – 2009-06-21 02:19:13

1

我有類似你這樣的問題,並希望分享我的決心。

總之,我這是HTTP請求一個控制檯程序,並會,15分鐘後左右的時間,超時。但是,如果我使用Fiddler,那麼即使連續運行了幾天,我也從未體驗過超時。

我試着在App.config中設置MaxConnections最大財產,但似乎並沒有幫助的。然後,我進入了對HttpWebRequest,HttpWebResponse以及用於在使用塊中向這些對象讀/寫數據的流對象的每個引用。

似乎已經完成了帽子戲法。我已經跑了近24小時,沒有超時,沒有Fiddler跑步。

0

您查詢的原因來爲每次調用創建,它是開銷一個新的會話的方式,它可能是小提琴手會增加你的查詢....

嘗試

專用靜態的CookieContainer _cookieContainer =新的CookieContainer();

_httpWebRequest.CookieContainer = _cookieContainer; //回收cookiecontainer

0

我們發生同樣的問題, 將您的httpWebRequest.PreAuthenticate設置爲true。

你不應該有401迴應了,所以你會打開更少的連接...

0

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

此默認設置爲HttpVersion.Version11。當我將其設置回默認值時,如果沒有提琴手,我的請求會更快。

我希望這可以幫助別人,它讓我整個早上都明白了這一點!

相關問題