Calculando a velocidade de download atual (não média)

No meu aplicativo gerenciador de downloads, estou usando o código abaixo para calcular a taxa de transferência atual:

<code>        TimeSpan interval = DateTime.Now - lastUpdateTime;

        downloadSpeed = (int)Math.Floor((double)(DownloadedSize + cachedSize - lastUpdateDownloadedSize) / interval.TotalSeconds);

        lastUpdateDownloadedSize = DownloadedSize + cachedSize;
        lastUpdateTime = DateTime.Now;
</code>

Isso funciona principalmente do jeito que eu quero (eu estou atualizando a velocidade a cada 4 segundos ou mais), mas sempre há alguns picos loucos na taxa de download, uma vez que flutua. Minha velocidade média de download é de cerca de 600 kB / s, e às vezes mostra 10,25 MB / s ou até valores negativos como -2093848 B / s. Como isso poderia ser?

Qual é a melhor maneira de calcular a taxa de download em tempo real? Eu não estou interessado na taxa média (DownloadedSize / TimeElapsed.TotalSeconds), porque não dá resultados realistas.

questionAnswers(1)

yourAnswerToTheQuestion