C# HttpClient 上传速度慢

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

我正在尝试将大文件(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 捕获流量: slow-uploading-screenshot 每个 block 被分成数百或数千个小的 TLS 数据包。对于每个打包的小型 TLS,都需要确认。因此产生的速度非常低。

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

我在 5 台装有 Win7 的电脑上测试了我的代码,所有电脑都显示出相似的低上传速度。但是当我在 Win10 PC 上尝试时——速度非常好。 我还尝试了 Google.Drive 客户端应用程序,它在速度方面也有同样的问题。 我试图搜索此行为,但没有找到任何内容。

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

最佳答案

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

关于C# HttpClient 上传速度慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33857823/

相关文章:

c# - C# 中 casting/conversion int/double 的解释

java - 文字被截断?

database - 什么是数组/有序查找数据库?

c# - 根据循环中另一个字典的值更新文本文件中的值

c# - 如何以编程方式将 PictureBox 控件添加到选项卡页控件

c# - .NET 隐藏标题栏但保留边框

c# - 如何使用反射在 IEnumerable<T> 上调用 System.Linq.Enumerable.Count<>?

C#:将 COMP-3 压缩十进制转换为人类可读的值

c# - 如何在asp.net core中以强类型方式获取资源字符串?

python - 如何计算连续n列的平均值?