我有一个简单的问题,我遇到的麻烦比我应该更多。
非常直截了当:我有一段时间过程_startTime
和当前时间。我还需要处理_records
所需的记录总数,以及当前记录编号_current
。
如何获得结束时间的简单线性预测?我最终陷入了一个差别蜱和东西的兔子洞,但我想我可以使用一些简单的DateTime或TimeSpan技巧,
TimeSpan delta = DateTime.Now - _startTime;
float progress = (float)_records / (float)_current;
答案 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);
也许这就是你需要的东西?