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