Calculate Time Remaining

后端 未结 16 2647
一生所求
一生所求 2020-12-04 08:22

What\'s a good algorithm for determining the remaining time for something to complete? I know how many total lines there are, and how many have completed already, how shoul

16条回答
  •  猫巷女王i
    2020-12-04 09:08

    I'm surprised no one has answered this question with code!

    The simple way to calculate time, as answered by @JoshBerke, can be coded as follows:

    DateTime startTime = DateTime.Now;
    for (int index = 0, count = lines.Count; index < count; index++) {
        // Do the processing
        ...
    
        // Calculate the time remaining:
        TimeSpan timeRemaining = TimeSpan.FromTicks(DateTime.Now.Subtract(startTime).Ticks * (count - (index+1)) / (index+1));
    
        // Display the progress to the user
        ...
    }
    

    This simple example works great for simple progress calculation.
    However, for a more complicated task, there are many ways this calculation could be improved!

    For example, when you're downloading a large file, the download speed could easily fluctuate. To calculate the most accurate "ETA", a good algorithm would be to only consider the past 10 seconds of progress. Check out ETACalculator.cs for an implementation of this algorithm!

    ETACalculator.cs is from Progression -- an open source library that I wrote. It defines a very easy-to-use structure for all kinds of "progress calculation". It makes it easy to have nested steps that report different types of progress. If you're concerned about Perceived Performance (as @JoshBerke suggested), it will help you immensely.

提交回复
热议问题