预测过程结束时间

本文关键字:时间 结束 过程 | 更新日期: 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);

也许这就是你需要的?