C# HttpClient上传速度慢

20

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

我查看了API源代码 source code。每个文件都是通过块上传的(我将块大小设置为4 MB),每个块都是通过新的HttpRequestMessage实例上传的。 HttpClient在api服务启动时创建并重用所有请求。

上传速度为600 kbytes / s,而我的上行速度快10倍。

我用Wireshark捕获了流量:slow-uploading-screenshot,每个块被分成数百或数千个小的TLS数据包。对于每个小的TLS数据包,都需要确认。 所以结果速度非常慢。

但是当我启动Fiddler代理时,速度就变得与我的上行速度一样快了。 TLS数据包在并行发送,稍后收到确认: tls-packets-first-screenshot tcp-ack-later

我在5台安装了Win7的PC上尝试了我的代码,所有PC都显示出类似的低上传速度。 但是当我在Win10 PC上尝试时,速度非常好。 另外,我尝试了Google.Drive客户端应用程序,它也有同样的速度问题。 我试图搜索此行为,但没有找到任何信息。

  1. 为什么4 MB块分成4 KB的TLS数据包? 我可以增加TLS数据包的大小吗?
  2. 如何像Fiddler一样并行发送TLS数据包?
  3. 还有其他提高上传速度的方法吗?

我想知道这是否是 https://ask.wireshark.org/questions/38768/slow-upload-speed-from-windows-stations-to-ssl-hosts 上描述的问题的变体,一些软件(如Fiddler)正在解决,但您使用的HttpClient却没有。 - Jon Hanna
我会尝试使用https://github.com/Redth/HttpTwo。 - Botond Botos
我也遇到了同样的问题。你找到解决这个问题的方法了吗? - Mayuresh
2个回答

1
很有可能问题出在谷歌链接上,而非其他方面。我一直使用Chrome上传文件到Google Drive,除了我的上传速度非常快(50Mbps),谷歌似乎有限制。

0

SSLv3/TLSv1的最大记录大小为16kB,因此您可能正在与旧版本握手。我认为谷歌已经优化了使用SPDY/HTTP2协议,可以在同一连接中并行发送。也许您的客户端没有...

如何使.net HttpClient使用http 2.0?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接