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