Я пытаюсь загрузить большие (50 МБ - 32 ГБ) файлы в Google.Drive. Я использую google-api-dotnet, который обеспечивает логику загрузки и поддержку шифрования. Основная проблема - медленная скорость загрузки.
Я просмотрел исходный код api . Каждый файл загружается кусками (я устанавливаю размер блока до 4 МБ). Каждый кусок загружается с помощью нового экземпляра HttpRequestMessage. HttpClient создается после запуска и повторного использования службы api для всех запросов.
Скорость загрузки 600 кбайт/с и стабильная, в то время как моя восходящая линия связи в 10 раз быстрее.
Я захватил трафик с Wireshark: Каждый кусок разделен на сотни или тысячи небольших пакетов TLS. И для каждого небольшого пакета TLS ожидается подтверждение. Таким образом, результирующая скорость очень низкая.
Но когда я запускаю прокси Fiddler, скорость становится такой же быстрой, как моя uplink. Пакеты TLS идут очень быстро параллельно, и подтверждения принимаются позже:
Я попробовал свой код на 5 ПК с Win7, и все показали такую же низкую скорость загрузки. Но когда я попытался на ПК Win10, скорость была очень хорошей. Также я попробовал клиентское приложение Google.Drive, и у него были такие же проблемы со скоростью. Я попытался найти это поведение, но ничего не нашел.
- Почему 4 МБ фрагментов разделены на 4 КБ TLS-пакетов? Могу ли я увеличить размер пакетов TLS?
- Как я могу отправить пакеты TLS параллельно, как это делает Fiddler?
- Или существуют другие способы увеличения скорости загрузки?