C # HttpClient медленная скорость загрузки

Я пытаюсь загрузить файлы большого размера (50–32 ГБ) на Google.Drive. Я использую google-api-dotnet, который обеспечивает логику загрузки и поддержку шифрования. Основная проблема - низкая скорость загрузки.

Я просмотрел api исходный код. Каждый файл загружается фрагментами (я установил размер фрагмента 4 МБ). Каждый фрагмент загружается через новый экземпляр HttpRequestMessage. HttpClient создается после запуска службы api и повторно используется для всех запросов.

Скорость загрузки составляет 600 кбайт / с и стабильна, в то время как мой аплинк в 10 раз быстрее.

Я захватил трафик с помощью Wireshark: slow-uploading-screenshotКаждый фрагмент разделен на сотни или тысячи небольших пакетов TLS. И для каждого упакованного маленького TLS ожидается подтверждение. Таким образом, итоговая скорость очень мала.

Но когда я запускаю прокси-сервер Fiddler, скорость становится такой же, как у моего восходящего канала. Пакеты TLS идут очень быстро параллельно, а подтверждения принимаются позже: tls-packets-first-screenshottcp-ack-later

Я пробовал свой код на 5 ПК с Win7, и все они показали одинаково низкую скорость загрузки. Но когда я попробовал на ПК Win10 - скорость была очень хорошей. Также я попробовал клиентское приложение Google.Drive, и у него были такие же проблемы со скоростью. Я попытался найти информацию об этом поведении, но ничего не нашел.

  1. Почему блоки размером 4 МБ разделены на пакеты TLS по 4 КБ? Могу ли я увеличить размер пакетов TLS?
  2. Как я могу сделать так, чтобы пакеты TLS отправлялись параллельно, как это делает Fiddler?
  3. Или есть другие способы увеличения скорости отдачи?

person Ivan Peresedov    schedule 22.11.2015    source источник
comment
Интересно, является ли это вариант проблемы, описанной в ask.wireshark.org/questions/38768/, с которой работает некоторое программное обеспечение (Fiddler), но вы не используете HttpClient .   -  person Jon Hanna    schedule 24.11.2015
comment
Я бы попробовал github.com/Redth/HttpTwo   -  person Botond Botos    schedule 08.11.2016
comment
У меня такая же проблема. Вы нашли способ решить эту проблему?   -  person Mayuresh    schedule 30.08.2017


Ответы (2)


Вполне возможно, что проблема в ссылке Google, а не в чем-то другом. Я загружал вещи на Google Drive с помощью Chrome, и, кроме того, что моя ссылка для загрузки огромна (50 Мбит / с), Google кажется ограниченным.

person user7358693    schedule 31.12.2016

Максимальный размер записи составляет 16 КБ для SSLv3 / TLSv1, поэтому, возможно, вы установили рукопожатие с более старой версией. Я думаю, что Google оптимизирован для пользовательского протокола SPDY / HTTP2, который может отправлять параллельно в одном и том же соединении. Может быть, ваш клиент не ...

Как заставить .net HttpClient использовать http 2.0? < / а>

person Mr_Thorynque    schedule 26.11.2015