Переносится ли Stopwatch.Gettimestamp? Или откатиться назад?

В с помощью секундомера.GetTimestamp () мы обнаруживаем, что если вы записываете возвращаемое значение, а затем продолжаете вызывать его и сравнивать с предыдущим возвращаемым значением, оно в конечном итоге, но непредсказуемо, вернет значение меньше исходного.

Это ожидаемое поведение?

Цель выполнения этого в производственном коде - получить системное время с точностью до микросекунды.

Метод включает вызов DateTime.UtcNow, а также вызов Stopwatch.GetTimestamp () как originalUtcNow и originalTimestamp соответственно.

С этого момента приложение просто вызывает Stopwatch.GetTimestamp () и, используя Stopwatch.Frequency, вычисляет разницу из переменной originalTimestamp, а затем добавляет эту разницу к originalUtcNow.

Тогда, вуаля ... эффективное и точное время в микросекундах.

Но мы обнаруживаем, что иногда Stopwatch.GetTimestamp () возвращает меньшее число.

Это случается довольно редко. Мы думаем просто «перезагрузить», когда это произойдет, и продолжить.

ОДНАКО, это заставляет нас сомневаться в точности Stopwatch.GetTimestamp () или подозревать, что в библиотеке .Net есть ошибка.

Если вы можете пролить свет на это, пожалуйста.

К вашему сведению, на основании текущего значения временной метки, частоты и long.MaxValue маловероятно, что это произойдет в течение нашей жизни, если только это не проблема с оборудованием.

РЕДАКТИРОВАТЬ: теперь мы вычисляем это значение «на поток», а затем «зажимаем его», чтобы следить за переходами между ядрами, чтобы сбросить его.

6
задан Wayne 24 January 2012 в 01:50
поделиться