代码之家  ›  专栏  ›  技术社区  ›  STORM

如何使用秒表测量多个点之间经过的时间?

  •  0
  • STORM  · 技术社区  · 6 年前

    我想测量代码中当前经过的时间和多个代码段之间经过的时间。一个例子:

    当我想得到我正在做的时间

    static void Main(string[] args)
    {
        Stopwatch _stopwatch = new Stopwatch();
        _stopwatch.Start();
    
        ... do something ...
    
        _stopwatch.Stop();
        Console.WriteLine("Time elapsed total: {0:hh\\:mm\\:ss}", _stopwatch.Elapsed);
    }
    

    我还可以像这样输出代码执行过程中经过的时间

    static void Main(string[] args)
    {
        Stopwatch _stopwatch = new Stopwatch();
        _stopwatch.Start();
    
        ... do something ...
        Console.WriteLine("Time elapsed: {0:hh\\:mm\\:ss}", _stopwatch.Elapsed);
    
        ... do something ...
        Console.WriteLine("Time elapsed: {0:hh\\:mm\\:ss}", _stopwatch.Elapsed);
    
        ... do something ...
        Console.WriteLine("Time elapsed: {0:hh\\:mm\\:ss}", _stopwatch.Elapsed);
    
        ... do something ...
        Console.WriteLine("Time elapsed: {0:hh\\:mm\\:ss}", _stopwatch.Elapsed);
    
    
        // finally
        _stopwatch.Stop();
        Console.WriteLine("Time elapsed total: {0:hh\\:mm\\:ss}", _stopwatch.Elapsed);
    }
    

    但我想要的是这样的:

    Code startet ... | elapsed time 00:02:01:sss | this single segment took 00:02:01:sss
    
    Connected to database ... | elapsed time 00:02:04:sss | this single segment took 00:00:03:sss
    
    Added 40.000 rows ... | elapsed time 00:05:23:sss | this single segment took 00:03:19:sss
    

    所以,我要做的是让代码中的单个部分的总运行时间和停止的时间与运行时间相比,只有一个部分的时间。

    我怎么能这样做?

    2 回复  |  直到 6 年前
        1
  •  0
  •   Abhinaw Kaushik    6 年前

    使用 Restart() 在每次打印经过的时间之后的秒表方法;它会将经过的时间重置为0…并保留一个变量以将经过的时间求和为总经过的时间。

    希望这有帮助…

        2
  •  0
  •   STORM    6 年前

    我想我解决了。对我来说,也许有些专家可以检查“优化”?

    我将最后一个时间跨度存储在一个Vraiable中,并从当前时间跨度中选择最后一个时间跨度:

        private static TimeSpan _pastTimeSpan;
    
        static void Main(string[] args)
        {
            _stopwatch = new Stopwatch();
            _stopwatch.Start();
    
            _pastTimeSpan = _stopwatch.Elapsed;
    
            ... code ...
    
            MyElapsedTime(_stopwatch.Elapsed);
    
            ... code ...
    
            MyElapsedTime(_stopwatch.Elapsed);
    
            ... code ...
    
            MyElapsedTime(_stopwatch.Elapsed);
    
            _stopwatch.Stop();
            Console.WriteLine("Time elapsed total: {0:hh\\:mm\\:ss}", _stopwatch.Elapsed);
         }
    
        private static void MyElapsedTime(TimeSpan ts)
        {
            // Get the last TimeSpan
            TimeSpan pastTimeSpan = _pastTimeSpan;
    
            // Update last TimeSpan with current
            _pastTimeSpan = ts;
    
            // Get difference between two
            TimeSpan diffTs = ts.Subtract(pastTimeSpan);
    
            Console.WriteLine(string.Format("Elapsed time {0}:{1} | Segment took {2}:{3}", Math.Floor(ts.TotalMinutes), ts.ToString("ss\\.ff"), Math.Floor(diffTs.TotalMinutes), diffTs.ToString("ss\\.ff")));
        }
    

    输出将是

    Elapsed time 0:01.70 | Segment took 0:01.70
    Elapsed time 0:01.78 | Segment took 0:00.07