@trauus

Почему HttpClient тормозит?

Пишу десктопное приложение для работы с Google.Drive. Использую гугловское API. Проблема с загрузкой файлов в облако. При загрузке файл делится на чанки размером 4 МБ. Каждый чанк отправляется отдельным HttpRequestMessage. Используется HTTPS протокол.
Скорость очень маленькая, но стабильная - 600 Кбайт/с при канале в 6 Мбайт/с. Увеличение размера чанка практически не помогает.

Wireshark показывает вот что:
2a1f06aa2e6f452ca68a4da7fc8c0715.png
Каждый чанк делится на огромное количество мелких TLS пакетов по 4000 байт и по каждому пакету ожидается подтверждение TCP ACK.
Запускаю прокси Fiddler с опцией захвата Https (но без опций reuse client / server connections ). Скорость вырастает до предела канала. Wireshark при этом показывает, что сначала практически мгновенно отправляется огромное количество TLS пакетов без ожидания TCP ACK. Затем приходит пачка подтверждений и все повторяется для следующего чанка.

Проверял на 5 ПК с Win7 - тормозит. Попробовал на ПК с Win10 - скорость была раз в 10 выше.

Вопросы:
1. Это нормально, что System.Http.HttpClient разбивает каждый чанк на такие мелкие фрагменты? Это где-то настраивается?
2. Как можно ускорить отправку чанков, не запуская Fiddler?
3. Можно ли заставить HttpClient делить чанк на более крупные фрагменты?
  • Вопрос задан
  • 398 просмотров
Пригласить эксперта
Ответы на вопрос 1
@SZolotov
Asp.net core, MAUI,WPF,Qt, Avalonia
Для какой венды пишите, какое SDK используете? Пример кода нужен.
Например, в Win RT SDK не рекомендуется использовать httpclient для скачивания/закачивания файлов больше нескольких килобайт.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы