C# 预测过程结束时间
我有一个简单的问题,我遇到了比我应该遇到的更多的麻烦 这很简单:我有一个流程开始的时间和当前时间。我还有需要处理的记录总数C# 预测过程结束时间,c#,datetime,C#,Datetime,我有一个简单的问题,我遇到了比我应该遇到的更多的麻烦 这很简单:我有一个流程开始的时间和当前时间。我还有需要处理的记录总数\u记录,以及当前记录编号\u当前 我怎样才能得到一个简单的结束时间线性预测?我最终陷入了一个有差异的滴答声之类的兔子洞,但我想我可以用一些简单的DateTime或TimeSpan技巧 TimeSpan delta = DateTime.Now - _startTime; float progress = (float)_records / (float)_current;
\u记录
,以及当前记录编号\u当前
我怎样才能得到一个简单的结束时间线性预测?我最终陷入了一个有差异的滴答声之类的兔子洞,但我想我可以用一些简单的DateTime或TimeSpan技巧
TimeSpan delta = DateTime.Now - _startTime;
float progress = (float)_records / (float)_current;
嗯,听起来确实比实际情况简单得多
TimeSpan timeTakenSoFar = DateTime.Now - _startTime;
double percentageDoneSoFar = (double)_current / (double)_records;
TimeSpan timeTakingInTotal = timeTakenSoFar / percentageDoneSoFar;
DateTime finishTime = _startTime.Add(timeTakingInTotal);
这应该行得通
更新:
根据MSDN,您不能划分时间跨度,但在这种情况下,您可以使用记号:(我手头没有C#编译器来检查它是否100%语法正确)
每隔几个周期抽取一个样本,并确定从开始时间开始需要多长时间
now.subtract(_startTtime)
除以_当前指针,得到每个周期的时间
使用((\u记录-\u当前值)
也许这就是你所需要的?也许只是澄清你的答案,
percentageDoneSoFar=\u records/\u current;
并不是真正的百分比…800/400=2,不是50%噢-对不起,错了-更新了,谢谢注意,这就是为什么描述性变量名如此重要:)而且你可能必须将其中一个变量转换为双变量。另外,timetakingtall
可能应该重命名为timeRemaining
或其他名称。这很完美(有了更新),谢谢!我知道我只是在胡思乱想——这就是首席执行官在等待结果时修改代码的问题:)
now.subtract(_startTtime)
var restRecords = _records - _current;
var averageTimeForRecord = delta.TotalMilliseconds / _current;
var restTime = restRecords * averageTimeForRecord;
var finishDate = DateTime.Now.AddMilliseconds(restTime);