2012-05-03 118 views
16

我寫了一個多線程程序在C#抓取一個網站,但是當我開始在後臺請求中的Fiddler完成12倍快,這真的很奇怪,當我關閉Fiddler下載速度減速。如何可能請幫助,(沒有代理設置我的連接到互聯網和Fiddler太)如果我可以在我的應用程序中注入提琴手的性能這將是美好的,任何解決方案?幕後有什麼魔術? :)爲什麼Http請求與提琴手是快速發展

謝謝

回答

11

你能顯示一些示例代碼,以便人們可以證實這一點嗎?否則,它會變得瘋狂猜測。

我最好的猜測是:Fiddler uses keepalive這將節省打開連接一遍又一遍的麻煩。您可以通過禁用Reuse client connectionsReuse connections to servers來確認這一點:如果緩慢(或較慢),則保持連接處於活動狀態可以獲得好處。

+0

在我的程序中,當我創建一個連接並下載內容時,我將在最後關閉響應並中止請求,但是我想知道這是與在後臺運行fiddler的代碼相同的代碼快速。小提琴手是否會更改我的請求併爲每個請求使用相同的連接? – Ehsan

+0

@Eshan _「提琴手是否會更改我的請求併爲每個請求使用相同的連接?」_是的。 – CodeCaster

+1

那麼如何在HttpWebRequest的程序中使用此功能? – Ehsan

22

原因是使用Fiddler時忽略的http連接數量的限制。

我在使用System.Net.Http.HttpClient執行多個(〜80)併發請求時遇到了相同的行爲。隨着小提琴手的運行,所有的請求都以更快的速度完成。保持活力當然是啓用的。

我使用Wireshark來查看發生了什麼,我注意到的第一件事,http流量的方式是不同的。隨着小提琴手的請求被一次拋出,之後響應也很好地分組。沒有提琴手,請求與響應交錯。

其次,tcpview顯示我沒有Fiddler的代碼只創建了2個到服務器的tcp連接。隨着小提琴手開始,連接數量急劇增加。有數十個從我的應用程序到Fiddler,然後從Fiddler到服務器。

衆所周知,http標準建議http連接的數量不應超過2個,而且似乎該限制是作爲http客戶端中的默認設置實現的。

在.NET應用程序中,我們可以使用ServicePointManager.DefaultConnectionLimit靜態屬性來控制限制。作爲一個實驗,將其設置爲100使請求在有或沒有提琴手的情況下執行相同的速度。

的設定也可以通過的app.config進行控制:

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

現在,爲什麼默認的連接限制不同時使用招尊重?當一個http客戶端使用一個代理並且Fiddler充當代理時,結果是不同的。除了this old article之外,我沒有找到有關代理連接限制的更多信息。

相關問題