Sto tentando di caricare file di grandi dimensioni (50 MB - 32 GB) su Google.Drive. Sto usando google-api-dotnet che fornisce la logica di caricamento e il supporto per la crittografia. Il problema principale è la velocità di caricamento lento.C# HttpClient velocità di caricamento lento
Ho guardato attraverso api source code. Ogni file viene caricato da blocchi (ho impostato la dimensione del blocco a 4 MB) Ogni blocco viene caricato tramite la nuova istanza HttpRequestMessage. HttpClient viene creato una volta avviato e riutilizzato il servizio API per tutte le richieste.
La velocità di upload è 600 kbyte/se stabile mentre il mio uplink è 10 volte più veloce.
Ho catturato il traffico con Wireshark: Ogni blocco è diviso in centinaia o migliaia di pacchetti TLS di piccole dimensioni. E per ogni TLS piccolo imballato è prevista una conferma. Quindi la velocità risultante è molto bassa.
Ma quando avvii il proxy Fiddler, la velocità diventa veloce come il mio uplink può fare. Il TLS pacchetti andando molto veloce in parallelo e le conferme vengono ricevuti in seguito:
Ho cercato il mio codice su 5 PC con Win7 e tutti hanno mostrato simile a bassa velocità di upload. Ma quando ho provato su Win10 PC, la velocità era molto buona. Ho provato anche l'applicazione client Google.Drive e ha avuto gli stessi problemi di velocità. Ho provato a cercare su questo comportamento, ma non ho trovato nulla.
- Perché i blocchi da 4 MB sono suddivisi in pacchetti TLS da 4 KB? Posso aumentare le dimensioni dei pacchetti TLS?
- Come posso inviare i pacchetti TLS in parallelo come fa Fiddler?
- Oppure ci sono altri metodi per aumentare la velocità di upload?
Mi chiedo se questa è una variante del problema descritto in https://ask.wireshark.org/questions/38768/slow-upload-speed-from-windows-stations-to-ssl-hosts che alcuni software (Fiddler) sta funzionando, ma il tuo uso di HttpClient non lo è. –
Vorrei provare a https://github.com/Redth/HttpTwo –
Ho riscontrato lo stesso problema. Hai trovato qualche soluzione per questo problema? – Mayuresh