当然,您可以将剩余文件大小除以当前下载速度,但如果您的下载速度波动(而且它会波动),这不会产生非常好的结果。有什么更好的算法可以产生更平滑的倒计时?
An 指数移动平均线非常适合这个。它提供了一种平滑平均值的方法,以便每次添加新样本时,旧样本对总体平均值的重要性就会降低。它们仍然被考虑,但它们的重要性呈指数下降——因此得名。由于它是“移动”平均值,因此您只需保留一个数字即可。
在测量下载速度的情况下,公式如下所示:
averageSpeed = SMOOTHING_FACTOR * lastSpeed + (1-SMOOTHING_FACTOR) * averageSpeed;
SMOOTHING_FACTOR
是 0 到 1 之间的数字。该数字越大,旧样本被丢弃的速度越快。正如你在公式中看到的,当SMOOTHING_FACTOR
为 1 时,您只是使用最后一次观察的值。什么时候SMOOTHING_FACTOR
is 0 averageSpeed
永远不会改变。因此,您需要介于两者之间的值,并且通常是较低的值以获得良好的平滑效果。我发现 0.005 为平均下载速度提供了相当好的平滑值。
lastSpeed
是最后测量的下载速度。您可以通过每秒运行一个计时器来获取此值,以计算自上次运行以来已下载的字节数。
averageSpeed
显然,是您想要用来计算预计剩余时间的数字。将其初始化为第一个lastSpeed
您得到的测量值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)