我寫了一個多線程程序在C#抓取一個網站,但是當我開始在後臺請求中的Fiddler完成12倍快,這真的很奇怪,當我關閉Fiddler下載速度減速。如何可能請幫助,(沒有代理設置我的連接到互聯網和Fiddler太)如果我可以在我的應用程序中注入提琴手的性能這將是美好的,任何解決方案?幕後有什麼魔術? :)爲什麼Http請求與提琴手是快速發展
謝謝
我寫了一個多線程程序在C#抓取一個網站,但是當我開始在後臺請求中的Fiddler完成12倍快,這真的很奇怪,當我關閉Fiddler下載速度減速。如何可能請幫助,(沒有代理設置我的連接到互聯網和Fiddler太)如果我可以在我的應用程序中注入提琴手的性能這將是美好的,任何解決方案?幕後有什麼魔術? :)爲什麼Http請求與提琴手是快速發展
謝謝
你能顯示一些示例代碼,以便人們可以證實這一點嗎?否則,它會變得瘋狂猜測。
我最好的猜測是:Fiddler uses keepalive這將節省打開連接一遍又一遍的麻煩。您可以通過禁用Reuse client connections
和Reuse connections to servers
來確認這一點:如果緩慢(或較慢),則保持連接處於活動狀態可以獲得好處。
原因是使用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之外,我沒有找到有關代理連接限制的更多信息。
在我的程序中,當我創建一個連接並下載內容時,我將在最後關閉響應並中止請求,但是我想知道這是與在後臺運行fiddler的代碼相同的代碼快速。小提琴手是否會更改我的請求併爲每個請求使用相同的連接? – Ehsan
@Eshan _「提琴手是否會更改我的請求併爲每個請求使用相同的連接?」_是的。 – CodeCaster
那麼如何在HttpWebRequest的程序中使用此功能? – Ehsan