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

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

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. 仅计算一次,使用两次。