Секундомер против использования системы.значение datetime.Теперь для синхронизации событий [дубликат]
этот вопрос уже есть ответ здесь:
Я хотел отслеживать производительность моего кода, поэтому я сохранил время начала и окончания с помощью System.DateTime.Now
. Я взял разницу между ними как время выполнения моего кода.
Я заметил, что разница, казалось, не была точной. Поэтому я попытался использовать
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 мс, этого недостаточно.
изменить: Это похоже на вторую дату и время.Теперь вызывается в другое время, чем при завершении метода секундомера.