Секундомер против использования системы.значение datetime.Теперь для синхронизации событий [дубликат]


этот вопрос уже есть ответ здесь:

Я хотел отслеживать производительность моего кода, поэтому я сохранил время начала и окончания с помощью System.DateTime.Now. Я взял разницу между ними как время выполнения моего кода.

Я заметил, что разница, казалось, не была точной. Поэтому я попытался использовать

3 88

3 ответа:

по состоянию на MSDN:

секундомер измеряет затраченное время, подсчитывая тики таймера в базовом механизме таймера. Если установленное оборудование и операционная система поддерживают счетчик производительности с высоким разрешением, то класс секундомера использует этот счетчик для измерения прошедшего времени. В противном случае класс секундомера использует системный таймер для измерения прошедшего времени. Используйте поля частоты и разрешения IsHighResolution для определения точности и разрешения Секундомер сроки выполнения.

Он использует более высокое разрешение / точность, чем DateTime.Now.

вы также можете проверить эти ссылки:

окружающая среда.TickCount vs DateTime.Сейчас

Это Дата И Время.Теперь лучший способ измерить производительность функции?

DateTime достаточно хорошо для точности до второго, вероятно, но что-нибудь за пределами этого я бы рекомендовал StopWatch.

лучше использовать класс секундомера, потому что он намного точнее, чем вычитание значений DateTime:

Stopwatch s = Stopwatch.StartNew();
// Tested code here
s.Stop();
Console.WriteLine("Elapsed Time: {0} ms", s.ElapsedMilliseconds);

к сожалению, этого простого фрагмента кода будет недостаточно для получения точных измерений в большинстве случаев, потому что под капотом ОС происходит много активности, которая может украсть некоторое время процессора и замедлить выполнение вашего кода. Вот почему лучше всего выполнить тесты несколько раз, а затем удалить самые низкие и самые высокие времена. Для это puprose это хорошее решение, чтобы иметь метод, который выполняет тестируемый код несколько раз, удаляет самые низкие и самые большие времена и вычисляет среднее время. Я опубликовал пример метода тестирования в моем блоге.

этой функции сроки исполнения ссылка обсуждает вашу точную проблему, в частности этот пункт:

проблема в том, что в соответствии с MSDN разрешение DateTime.Теперь функция составляет 10 + миллисекунд, и нам нужно вызвать ее дважды! Так что бы ввести 20 + мс качели в вашем измерении времени выполнения. Поскольку наши вызовы функций часто, вероятно, будут намного быстрее возвращаться, чем это окно 20 мс, этого недостаточно.

изменить: Это похоже на вторую дату и время.Теперь вызывается в другое время, чем при завершении метода секундомера.