Согласно MSDN :
Секундомер измеряет прошедшее время путем подсчета тактов таймера в базовом механизме таймера. Если установленное оборудование и операционная система поддерживают счетчик производительности с высоким разрешением, то класс Stopwatch использует этот счетчик для измерения прошедшего времени. В противном случае класс Stopwatch использует системный таймер для измерения прошедшего времени. Используйте поля Frequency и IsHighResolution, чтобы определить точность и разрешение временной реализации секундомера.
Он использует более высокое разрешение / точность, чем DateTime.Now
.
Вы также можете проверить эти ссылки по теме:
Environment.TickCount vs DateTime.Now
Является ли DateTime.Now лучшим способом измерения производительности функции?
DateTime
достаточно хорош для обеспечения точности ко второму, вероятно, но что-то еще, я бы порекомендовал StopWatch
.
в этой ссылке на производительность функции синхронизации обсуждается конкретная проблема, в частности в этом абзаце:
Проблема в том, что согласно MSDN разрешение функции DateTime.Now составляет 10+ миллисекунд, и нам нужно позвони дважды! Так что это приведет к размаху 20+ мс в ваших измерениях времени выполнения. Поскольку наши вызовы функций часто возвращаются намного быстрее, чем это окно в 20 мс, этого недостаточно.
РЕДАКТИРОВАТЬ: Это похоже на то, что второй DateTime.Now вызывается в другое время, чем когда завершается метод секундомера.