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:
<code> TimeSpan interval = DateTime.Now - lastUpdateTime; downloadSpeed = (int)Math.Floor((double)(DownloadedSize + cachedSize - lastUpdateDownloadedSize) / interval.TotalSeconds); lastUpdateDownloadedSize = DownloadedSize + cachedSize; lastUpdateTime = DateTime.Now; </code>
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.