如何估计WinForms方法的结束时间,以正确告知用户预计完成时间?

Mad*_*Boy 5 .net c# datetime winforms c#-3.0

我有一些计时器来衡量执行代码的时间.

 DateTime startTimeFunctionTotal = DateTime.Now;
     for (int i = 0; i < array.Count; i++) {
         DateTime startTimeFunction = DateTime.Now;
         //some code here

          DateTime stopTimeFunction = DateTime.Now;
          TimeSpan durationTimeFunction = stopTimeFunction - startTimeFunction ;

 }
 DateTime stopTimeFunctionTotal = DateTime.Now;
 TimeSpan durationTimeFunctionTotal = stopTimeFunctionTotal - startTimeFunctionTotal ;
Run Code Online (Sandbox Code Playgroud)

如果预测的时间根据更多数据而变化(每个循环有更多数据,因此预测应该更准确),这是允许的(甚至更好).

我想给用户一个预测的完成时间(时间分别为15分钟和10:56).

Yur*_*ich 3

假设 for 语句中的每个操作花费大致相同的时间:

List<TimeSpan> timeSpans = new List<TimeSpan>();
for(int i = 0; i < array.Count; i++)
{
    Stopwatch watch = Stopwatch.StartNew();
    //do stuff
    timeSpans.Add(watch.Elapsed);
    long ticksLeft = timeSpans.Sum(ts => ts.Ticks) * (array.Count - i) / timeSpans.Count;
    Console.WriteLine("Left: " + new TimeSpan(ticksLeft));
    Console.WriteLine("Finished in: " + 
        DateTime.Now.AddTicks(ticksLeft));
}
Run Code Online (Sandbox Code Playgroud)

与中位数一起使用:

long ticksLeft = timeSpans.OrderBy(ts => ts.Ticks)
    .ElementAt(timeSpans.Count / 2).Ticks * (array.Count - i);
Run Code Online (Sandbox Code Playgroud)