计算剩余时间的方法
来源:互联网 发布:mysql查询结果中文乱码 编辑:程序博客网 时间:2024/05/18 01:32
近日做一个软件,需要计算剩余时间。
算法原理就是: 已经耗时*剩余大小/已经处理的大小。
但发现了计算的速度一直抖动, 发现是因为UI在没有进度回调时,也在刷新剩余时间,这样导致了误差。
比如处理1G大小的数据 已经处理了100M 耗时100S, 那么剩余时间就是900S。
如果耗时100.3S时又计算速度,而此时还是只处理了100M(底层没有回调), 那么剩余时间就是902.7S。
假如在100.5时回调了进度100.5M,那么剩余时间就又是900S,这样就有了抖动。
所以正确方法是,只有在底层回调进度时进行计算剩余时间,抖动就少了很多。
现在计算一下正常速度变化, 会不会造成抖动。 假设平均速度时1M/1S
但突然在5秒内速度变成了0.5M/S. 总大小1000M。
100S 100M 剩余时间900S
100.5S 100.25M 剩余时间901.99S 正常情况是899秒
101S 100.5M 剩余时间903.975 正常情况是898秒
....
....
....
但这些是正常结果,就是因为速度变慢了,但可以很大程度解决上面提到的抖动BUG。
假如回调的速度时一次0.95 一次1.05 看看抖动如何,以秒为单位:
总大小1000M。
100S 100M 剩余时间900S
101S 100.95M 剩余时间899.49 大约期望的值
102S 102M 剩余时间898 和正常一样
103S 102.95M 剩余时间897.48 大约期望的值
在这样的误差情况下,剩余时间基本还是递减的,不会抖动。
现在计算一下抖动的临界状态:
t1 = 已经耗时*剩余大小/已经处理的大小。
t2= ( 已经耗时+dt) * (剩余大小-dm) / (已经处理的大小+dm)。
dt 是时间间隔, dm是当前处理的大小。 要抖动 就得t2<=t1
也就是速度突然满到一定程度(比如0),那么t2就会比t1还大。 以一个比值,这里就不计算了。
但如果把前面当成整体,承认这个公式的正确性,那么结果也是值得信赖的, 因为速度的不可预知, 剩余时间肯定也是变化的。
- 计算剩余时间的方法
- JS时间的计算,剩余时间的计算
- 一个计算剩余时间的php自定义函数
- python 计算程序剩余时间的小程序
- ecshop促销剩余时间 的函数调用方法
- PHP计算时间剩余时间
- 计算当天剩余时间
- PHP计算剩余时间的2种方法,返回距离现在时间的格式,如1秒前,1分前..
- PickerView计算剩余时间,主要是时间方面的转换
- 计时器 计算剩余时间、超时时间
- Java获取当天剩余时间的几种方法
- 剩余时间
- Android5.1 电池充电剩余时间计算
- 后台返回秒数 计算剩余时间
- Android5.1 电池充电剩余时间计算
- 显示特价剩余时间的插件
- 使用SHELL脚本取今天的剩余时间
- 在线考试的剩余时间显示问题(JavaScript)
- 用jquery的flot画图(公用的)
- 使用ASP.NET上传图片汇总(一)
- svn报目录 under control错误
- FLEX快捷键
- 使用ASP.NET上传图片汇总(二)
- 计算剩余时间的方法
- ASP.NET跳转页面的三种方法比较
- Javascript中文乱码问题
- 使用ASP.NET上传图片汇总(三)
- 初试数据库--eclipse连接数据库mysql,非常简单的入门!
- ToString()、Convert.ToString()、(string)、as string 的区别
- JAVA泛型深入分析
- Convert、Parse、TryParse、(int) 的区别
- 数据库优化方法(三)