Sto scrivendo un'applicazione che carica file di grandi dimensioni su un servizio Web utilizzando HttpWebRequest.Invio di file di grandi dimensioni con HttpWebRequest, buffer in aumento o in diminuzione in base alle esigenze
Questa applicazione verrà eseguita da varie persone con varie velocità di Internet.
Ho letto il file in modo asincrono e scrivo in modo asincrono questi blocchi sul flusso della richiesta. Lo faccio in un ciclo usando i callback. E continuo a farlo fino a quando non è stato inviato l'intero file.
La velocità del caricamento viene calcolata tra le scritture e la GUI viene successivamente aggiornata per mostrare la velocità.
Il problema che sto affrontando è decidere una dimensione del buffer. Se lo faccio troppo grande, gli utenti con connessioni lente non vedranno aggiornamenti frequenti della velocità. Se lo faccio troppo piccolo, gli utenti con connessioni veloci finiranno per "martellare" i metodi di lettura/scrittura che causano picchi di utilizzo della CPU.
Quello che sto facendo ora è avviare il buffer a 128kb, e poi ogni 10 scritture controllo la velocità media di scrittura di quelle 10 scritture, e se è in un secondo aumento la dimensione del buffer di 128kb. Riduco anche il buffer in modo simile se la velocità di scrittura scende sotto i 5 secondi.
Questo funziona abbastanza bene, ma sembra tutto molto arbitrario e sembra che ci sia margine di miglioramento. La mia domanda è, qualcuno ha affrontato una situazione simile e quale linea di condotta hai preso?
Grazie
Questo sembra un approccio molto solido. E funziona anche. Non lo cambierei – zmbq