При использовании Stopwatch.GetTimestamp() мы обнаруживаем, что если вы записываете возвращаемое значение, а затем продолжаете вызывать его и сравнивать с предыдущим возвращаемым значением, оно в конечном итоге, но непредсказуемо, вернет значение меньше исходного.
Это ожидаемое поведение?
Цель этого в производственном коде - иметь системное время с точностью до микросекунды.
Этот метод включает вызов DateTime.UtcNow, а также вызов Stopwatch.GetTimestamp() как originalUtcNow и originalTimestamp соответственно.
С этого момента приложение просто вызывает Stopwatch.GetTimestamp() и с помощью Stopwatch.Frequency вычисляет разницу между исходной переменной Timestamp, а затем добавляет эту разницу к originalUtcNow.
Затем вуаля... эффективный и точный микросекундный DateTime.
Но мы обнаруживаем, что иногда Stopwatch.GetTimestamp() возвращает меньшее число.
Бывает довольно редко. Наше мышление состоит в том, чтобы просто «сбросить», когда это произойдет, и продолжить.
ОДНАКО это заставляет нас сомневаться в точности Stopwatch.GetTimestamp() или подозревать, что в библиотеке .Net есть ошибка.
Если вы можете пролить свет на это, пожалуйста.
К вашему сведению, исходя из текущего значения метки времени, частоты и long.MaxValue, маловероятно, что он будет перенесен в течение нашей жизни, если только это не проблема с оборудованием.
РЕДАКТИРОВАТЬ: теперь мы вычисляем это значение «для каждого потока», а затем «зажимаем его», чтобы отслеживать переходы между ядрами для его сброса.
UtcNow
не является точным в микросекундах? Это число можно использовать только для точного определения времени интервалов. - person Groo   schedule 24.01.2012