2015-11-22 81 views
20

我試圖上傳大(50 MB - 32 GB)文件到Google.Drive。我正在使用提供上傳邏輯和加密支持的google-api-dotnet。主要問題是上傳速度緩慢。C#HttpClient緩慢上傳速度

我通過api查看source code。每個文件都通過塊上傳(我將塊大小設置爲4 MB)每個塊都通過新的HttpRequestMessage實例上傳。一旦api服務啓動並重新用於所有請求,就會創建HttpClient。

上傳速度爲600 kbytes/s,穩定,而我的上傳速度快了10倍。

我用Wireshark捕獲流量: slow-uploading-screenshot 每個塊被分成幾百或幾千個小TLS包。對於每個小型TLS包裝,預計會有確認。所以最終的速度非常低。

但是當我開始Fiddler代理時,速度變得和我的上行鏈路一樣快。 的TLS數據包正在並行非常快,確認稍後接收: tls-packets-first-screenshot tcp-ack-later

我想我在5 PC的代碼Win7和所有表現出類似的低上傳速度。但是當我在Win10 PC上試用時 - 速度非常好。 另外我嘗試了Google.Drive客戶端應用程序,它的速度也一樣。 我試圖搜索這種行爲,但我沒有找到任何東西。

  1. 爲什麼4 MB的塊被分成4 KB的TLS包?我可以增加TLS數據包大小嗎?
  2. 如何讓TLS數據包與Fiddler並行發送?
  3. 或者還有其他的方法來提高上傳速度嗎?
+0

我不知道這是否是在https://ask.wireshark.org/questions/38768/slow-upload-speed-from-windows-stations-to-ssl-hosts中描述的問題的變體,其中某些軟件( Fiddler)正在解決,但你使用HttpClient不是。 –

+0

我會嘗試https://github.com/Redth/HttpTwo –

+0

我面臨同樣的問題。你有沒有發現任何解決這個問題? – Mayuresh

回答

0

對於SSLv3/TLSv1,最大記錄大小爲16kB,因此您可能需要與舊版本握手。我認爲谷歌已經優化爲可以在同一連接中並行發送的用戶SPDY/HTTP2協議。也許你的客戶不...

How to make the .net HttpClient use http 2.0?

1

這是非常可能的,問題是谷歌的鏈接,而不是別的。我已經上傳東西到谷歌驅動器與鉻,除了我的上傳鏈接是巨人(50Mbps以上),谷歌似乎有限。