我有一个跨平台的 C++ 应用程序,我在其中下载了一个巨大的文件x。下载时,我想显示“当前”下载速度和估计时间。可悲的是,下载速度随处可见(从 1.5MB 到 100KB),这反过来又导致估计的时间并没有真正有用。
我很好奇,而不是重新发明轮子,是否有任何最佳实践来抑制下载速度的变化或如何以用户友好的方式最好地进行这些计算。
我有一个跨平台的 C++ 应用程序,我在其中下载了一个巨大的文件x。下载时,我想显示“当前”下载速度和估计时间。可悲的是,下载速度随处可见(从 1.5MB 到 100KB),这反过来又导致估计的时间并没有真正有用。
我很好奇,而不是重新发明轮子,是否有任何最佳实践来抑制下载速度的变化或如何以用户友好的方式最好地进行这些计算。
您可以简单地在更长的时间内平均速度,例如 30 秒或更长时间。算法非常简单:跟踪某个时间的文件大小,例如数组中的每一秒。然后,您可以通过从当前文件大小中减去截至 30 秒前的文件大小并将其除以 30 秒来计算过去 30 秒的平均速度。
另一种流行的技术是给更多的电流测量更多的权重。例如,过去 30 秒的测量值被赋予 weight 1
,前 30 秒的测量值被赋予较小的权重(如1/2
),然后1/4
依此类推(您可能应该停在大约1/8
)。这样,旧的速度仍然会起到一些作用,但很快就会被遗忘,仍然会发生一些抑制。
你应该阅读Trailing December months,它应该会给你一些关于它是如何工作的想法。