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