2015-11-22 17 views
20

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: slow-uploading-screenshot 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: tls-packets-first-screenshot tcp-ack-later

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.

  1. Perché i blocchi da 4 MB sono suddivisi in pacchetti TLS da 4 KB? Posso aumentare le dimensioni dei pacchetti TLS?
  2. Come posso inviare i pacchetti TLS in parallelo come fa Fiddler?
  3. Oppure ci sono altri metodi per aumentare la velocità di upload?
+0

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 è. –

+0

Vorrei provare a https://github.com/Redth/HttpTwo –

+0

Ho riscontrato lo stesso problema. Hai trovato qualche soluzione per questo problema? – Mayuresh

risposta

0

La dimensione massima del record è 16kB per SSLv3/TLSv1, quindi forse l'handshake con la versione precedente. Penso che Google sia ottimizzato per il protocolo utente SPDY/HTTP2 che può inviare in parallelo nella stessa connessione. Forse il tuo non cliente ...

How to make the .net HttpClient use http 2.0?

1

E 'altamente possibile che il problema è il link di Google, non altro. Sono stato caricato cose su Google Drive con Chrome e inoltre il mio link di caricamento è gigante (50 Mbps in su), Google sembra limitato.

Problemi correlati