2015-11-22 16 views
20

大きなファイル(50 MB〜32 GB)をGoogle.Driveにアップロードしようとしています。私はアップロードロジックと暗号化のサポートを提供するgoogle-api-dotnetを使用しています。主な問題はアップロード速度が遅いことです。C#HttpClientのアップロード速度が遅い

私はapi source codeを見ました。各ファイルはチャンクでアップロードされます(チャンクサイズは4 MBに設定されます)。各チャンクは新しいHttpRequestMessageインスタンスを介してアップロードされます。 HttpClientは、apiサービスが開始され、すべての要求に対して再利用されると作成されます。

アップロード速度は600kバイト/秒で、アップリンクは10倍高速ですが安定しています。

Wiresharkでトラフィックをキャプチャしました。 slow-uploading-screenshot 各チャンクは、数百または数千の小さなTLSパケットに分割されています。そして、小さなTLSがパックされるたびに、確認が期待されます。結果として生じる速度は非常に低い。

しかし、私がFiddlerプロキシを起動すると、スピードはアップリンクほど速くなります。 TLSは、並行して非常に速く行くパケットと確認が遅れて受信されています tls-packets-first-screenshot tcp-ack-later

私は5 PCのwin7のとの私のコードを試してみましたが、すべてが同様の低アップロード速度を示しました。しかし、私がWin10 PCを試したとき、スピードはとても良かったです。 また、私はGoogle.Driveクライアントアプリケーションを試してみましたが、速度にも同じ問題がありました。 この動作について検索しようとしましたが、何も見つかりませんでした。

  1. 4MBのチャンクが4KBのTLSパケットに分割されるのはなぜですか? TLSパケットのサイズを増やすことはできますか?
  2. FiddlerのようにTLSパケットを並行して送信するにはどうすればよいですか?
  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ですので、古いバージョンでハンドシェイクすることがあります。私はgoogleが同じ接続で並行して送ることができるユーザーSPDY/HTTP2 protocoleに最適化されていると思う。たぶん、あなたのクライアントではない...

How to make the .net HttpClient use http 2.0?

1

それは問題はGoogleのリンクではなく、何か他のものである可能性が高いです。私はクロムとGoogleのドライブにアップロードされているものの、私のアップロードリンクの他に巨大な(50mbpsのアップ)、Googleは限られているようです。