预测流程结束时间

时间:2014-08-01 09:03:56

标签: c# datetime

我有一个简单的问题,我遇到的麻烦比我应该更多。

非常直截了当:我有一段时间过程_startTime和当前时间。我还需要处理_records所需的记录总数,以及当前记录编号_current

如何获得结束时间的简单线性预测?我最终陷入了一个差别蜱和东西的兔子洞,但我想我可以使用一些简单的DateTime或TimeSpan技巧,

TimeSpan delta = DateTime.Now - _startTime;
float progress = (float)_records / (float)_current;

3 个答案:

答案 0 :(得分:1)

嗯真的听起来比它可能简单得多

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);

答案 1 :(得分:1)

每隔几个周期取一个样本,并确定他们从开始时间开始的时间。

now.subtract(_startTtime)

用_current指针除以,得到每个周期的时间。

多个时间/周期((_records - _current)&lt; - 你还剩下的周期)

您的&#34;示例&#34;越高分辨率,你的结果越准确......但它仍然只是一个预测。

答案 2 :(得分:0)

var restRecords = _records - _current;
var averageTimeForRecord = delta.TotalMilliseconds / _current;
var restTime = restRecords * averageTimeForRecord;
var finishDate = DateTime.Now.AddMilliseconds(restTime);

也许这就是你需要的东西?