预测过程结束时间
本文关键字:时间 结束 过程 | 更新日期: 2023-09-27 18:15:53
我有一个简单的问题,我遇到了比应该遇到的更多的麻烦。
它非常直接:我有一个进程开始_startTime
的时间,以及当前时间。我还有需要处理_records
的记录总数和当前记录数_current
。
如何获得结束时间的简单线性预测?我最终陷入了一个充满差异的兔子洞,但我想我可以使用一些简单的DateTime或TimeSpan技巧,
TimeSpan delta = DateTime.Now - _startTime;
float progress = (float)_records / (float)_current;
hmm听起来确实比简单得多
TimeSpan timeTakenSoFar = DateTime.Now - _startTime;
double percentageDoneSoFar = (double)_current / (double)_records;
TimeSpan timeTakingInTotal = timeTakenSoFar / percentageDoneSoFar;
DateTime finishTime = _startTime.Add(timeTakingInTotal);
这应该行得通。
更新:
根据MSDN,你不能划分TimeSpan,但在这种情况下,你可以使用ticks:(我手头没有C#编译器来检查它是否100%语法正确(
TimeSpan timeTakenSoFar = DateTime.Now - _startTime;
double percentageDoneSoFar = (double)_current / (double)_records;
double timeTakingInTotalInTicks = timeTakenSoFar.Ticks / percentageDoneSoFar;
DateTime finishTime = _startTime.AddTicks((long)timeTakingInTotal);
每隔几个周期取一个样本,并确定它们从开始时间起需要多长时间。
now.subtract(_startTtime)
将其除以_current指针,得到每个周期的时间。
使用((_records - _current)
<-您要做的周期(将时间/周期相乘
你的"样本"分辨率越高,你的结果就越准确。。。但这仍然只是一个预测。
var restRecords = _records - _current;
var averageTimeForRecord = delta.TotalMilliseconds / _current;
var restTime = restRecords * averageTimeForRecord;
var finishDate = DateTime.Now.AddMilliseconds(restTime);
也许这就是你需要的?