Как использовать секундомер для измерения прошедшего времени между несколькими точками? - PullRequest
0 голосов
/ 23 ноября 2018

Я хочу измерить текущее время в моем коде и время, прошедшее между несколькими сегментами кода.Пример:

Когда я хочу получить истекшее время, которое я делаю

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 ]

0 голосов
/ 23 ноября 2018

Я думаю, что решил это.Для меня это выглядит, может быть, некоторые эксперты могут проверить на «оптимизацию»?

Я сохраняю последний временной интервал в 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
0 голосов
/ 23 ноября 2018

Использовать Restart() метод секундомера после каждого напечатанного времени;он сбросит истекшее время на 0 ... и оставит одну переменную, чтобы суммировать истекшее время как общее истекшее время.

Надеюсь, это поможет ...

...