Obliczanie bieżącej (nie średniej) prędkości pobierania
W mojej aplikacji menedżera pobierania używam poniższego kodu do obliczenia bieżącej szybkości transferu:
TimeSpan interval = DateTime.Now - lastUpdateTime;
downloadSpeed = (int)Math.Floor((double)(DownloadedSize + cachedSize - lastUpdateDownloadedSize) / interval.TotalSeconds);
lastUpdateDownloadedSize = DownloadedSize + cachedSize;
lastUpdateTime = DateTime.Now;
Działa to głównie tak, jak chcę (aktualizuję prędkość co około 4 sekundy), ale zawsze występują pewne szalone skoki w szybkości pobierania, ponieważ zmienia się. Moja średnia prędkość pobierania wynosi około 600 kB / s, a czasami pokazuje 10,25 MB / s, a nawet ujemne wartości, takie jak -2093848 B / s. Jak to możliwe?
Jak najlepiej obliczyć szybkość pobierania w czasie rzeczywistym? Nie interesuje mnie średnia stopa (DownloadedSize / TimeElapsed.TotalSeconds), ponieważ nie daje ona realistycznych wyników.