C#HttpClient上传速度慢

时间:2015-11-22 17:27:43

标签: c# .net performance google-drive-api dotnet-httpclient

我正在尝试将大型(50 MB - 32 GB)文件上传到Google.Drive。我正在使用google-api-dotnet,它提供上传逻辑和加密支持。主要问题是上传速度慢。

我浏览了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. 如何像Fiddler那样并行发送TLS数据包?
  3. 还是有其他提高上传速度的方法吗?

2 个答案:

答案 0 :(得分:1)

问题很可能是Google链接,而不是其他任何问题。我已经上传到带有chrome的谷歌驱动器的东西,除了我的上传链接是巨大的(50mbps以上),谷歌似乎有限。

答案 1 :(得分:0)

SSLv3 / TLSv1的最大记录大小为16kB,因此您可以与旧版本握手。我认为谷歌针对用户SPDY / HTTP2 protocole进行了优化,可以在同一个连接中并行发送。也许你的客户不是......

How to make the .net HttpClient use http 2.0?