计算当前(非平均)下载速度



在我的下载管理器应用程序中,我使用以下代码来计算当前的传输速率:

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

这主要按照我想要的方式工作(我每 4 秒左右更新一次速度(,但下载速率在波动时总是有一些疯狂的峰值。我的平均下载速度约为 600 kB/s,有时它会显示 10.25 MB/s 甚至负值,如 -2093848 B/s。这怎么可能?

计算实时下载速率的最佳方法是什么?我对平均速率(DownloadedSize/TimeElapsed.TotalSeconds(不感兴趣,因为它没有给出现实的结果。

鉴于"实时"是无法实现的,您应该尝试模拟它,方法是使间隔尽可能小和精确,并计算间隔内的平均值,检查代码的健全性。例如:

DateTime now = DateTime.Now;
TimeSpan interval = now - lastUpdateTime;
timeDiff = interval.TotalSeconds;
sizeDiff = DownloadedSize + cachedSize - lastUpdateDownloadedSize;
speed = (int)Math.Floor((double)(sizeDiff) / timeDiff);
lastUpdateDownloadedSize = DownloadedSize + cachedSize;
lastUpdateTime = now;

与您的代码的一个区别:

  1. 现在只计算一次,使用两次。

相关内容

  • 没有找到相关文章

最新更新