Próbuję przesłać duże pliki (50 MB - 32 GB) do Google.Drive. Używam google-api-dotnet, która zapewnia logikę przesyłania i obsługę szyfrowania. Głównym problemem jest powolna prędkość przesyłania.C# HttpClient wolna prędkość przesyłania
Przejrzałem api source code. Każdy plik jest przesyłany przez porcje (ustawiłem rozmiar porcji na 4 MB) Każdy fragment jest przesyłany za pośrednictwem nowej instancji HttpRequestMessage. HttpClient jest tworzony po uruchomieniu usługi APi i ponownym użyciu dla wszystkich żądań.
Prędkość wysyłania wynosi 600 kilobajtów/si stabilna, podczas gdy moje łącze wysyłające jest 10 razy szybsze.
Przechwyciłem ruch z Wireshark: Każda porcja jest podzielona na setki lub tysiące małych pakietów TLS. Dla każdego małego pakietu TLS spodziewane jest potwierdzenie. Tak więc uzyskana prędkość jest bardzo niska.
Ale kiedy zaczynam proxy Fiddlera, prędkość staje się tak szybka, jak może to zrobić moje łącze wysyłające. TLS pakiety które bardzo szybko się równolegle, zaś zatwierdzenia są odbierane później:
Próbowałem mój kod na 5 komputerach PC z Win7 i wszystkie wykazały podobną małą prędkość wysyłania. Ale kiedy próbowałem na Win10 PC - szybkość była bardzo dobra. Próbowałem również aplikacji klienta Google.Drive i miał takie same problemy z prędkością. Próbowałem przeszukać to zachowanie, ale niczego nie znalazłem.
- Dlaczego 4 MB porcji jest podzielone na 4 KB TLS? Czy mogę zwiększyć rozmiar pakietów TLS?
- Jak mogę ustawić wysyłanie pakietów TLS równolegle, tak jak robi to Skrzypek?
- A może istnieją inne metody zwiększania szybkości wysyłania?
Zastanawiam się, czy jest to wariant problemu opisanego na stronie https://ask.wireshark.org/questions/38768/slow-upload-speed-from-windows-stations-to-ssl-hosts, które niektóre programy (Fiddler) działa, ale nie używasz HttpClient. –
Chciałbym spróbować https://github.com/Redth/HttpTwo –
Mam do czynienia z tym samym problemem. Czy znalazłeś jakieś obejście tego problemu? – Mayuresh