【发布时间】: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 客户端应用程序,它在速度方面也有同样的问题。 我试图搜索这种行为,但没有找到任何东西。
- 为什么 4 MB 的块被分成 4 KB 的 TLS 数据包?我可以增加 TLS 数据包的大小吗?
- 如何让 TLS 数据包像 Fiddler 一样并行发送?
- 或者还有其他提高上传速度的方法吗?
【问题讨论】:
-
我想知道这是否是ask.wireshark.org/questions/38768/… 中描述的问题的变体,某些软件(Fiddler)正在解决该问题,但您对 HttpClient 的使用不是。
-
我面临同样的问题。您找到解决此问题的任何方法了吗?
标签: c# .net performance google-drive-api dotnet-httpclient