【问题标题】:C# HttpClient slow uploading speedC# HttpClient 上传速度慢
【发布时间】:2015-11-22 17:27:42
【问题描述】:

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

我查看了 api source code。每个文件都按块上传(我将块大小设置为 4 MB) 每个块都通过新的 HttpRequestMessage 实例上传。 HttpClient 会在 api 服务启动后创建并用于所有请求。

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

我使用 Wireshark 捕获流量: 每个块被分成数百或数千个小 TLS 数据包。并且对于每个打包的小型 TLS,都需要一个确认。所以产生的速度非常低。

但是当我启动 Fiddler 代理时,速度变得和我的上行链路一样快。 TLS 数据包并行传输非常快,稍后会收到确认:

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

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

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    How to make the .net HttpClient use http 2.0?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-18
      • 1970-01-01
      • 2011-01-14
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 2012-07-28
      相关资源
      最近更新 更多