我正在尝试将大文件(50 MB - 32 GB)上传到 Google.Drive。我正在使用提供上传逻辑和加密支持的 google-api-dotnet。主要问题是上传速度慢。
我查看了 api source code .每个文件都按 block 上传(我将 block 大小设置为 4 MB)每个 block 都通过新的 HttpRequestMessage 实例上传。一旦 api 服务启动并重新用于所有请求,就会创建 HttpClient。
上传速度为 600 kbytes/s 且稳定,而我的上行速度提高了 10 倍。
我使用 Wireshark 捕获流量: 每个 block 被分成数百或数千个小的 TLS 数据包。对于每个打包的小型 TLS,都需要确认。因此产生的速度非常低。
但是当我启动 Fiddler 代理时,速度变得和我的上行链路一样快。 并行传输的 TLS 数据包速度非常快,稍后会收到确认信息:
我在 5 台装有 Win7 的电脑上测试了我的代码,所有电脑都显示出相似的低上传速度。但是当我在 Win10 PC 上尝试时——速度非常好。 我还尝试了 Google.Drive 客户端应用程序,它在速度方面也有同样的问题。 我试图搜索此行为,但没有找到任何内容。
- 为什么将 4 MB 的 block 分成 4 KB 的 TLS 数据包?我可以增加 TLS 数据包的大小吗?
- 如何使 TLS 数据包像 Fiddler 一样并行发送?
- 或者还有其他提高上传速度的方法吗?
最佳答案
问题很可能出在 google 链接上,而不是其他任何地方。我已经用 chrome 将东西上传到谷歌驱动器,除了我的上传链接很大(50mbps 向上),谷歌似乎有限。
关于C# HttpClient 上传速度慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33857823/