Как получить временную метку точности тика в .NET / C #?
До сих пор я использовалDateTime.Now
для получения меток времени, но я заметил, что если вы печатаетеDateTime.Now
в цикле вы увидите, что он увеличивается в дискретных скачках ок. 15 мс Но для определенных сценариев в моем приложении мне нужно получить максимально точную временную метку, желательно с точностью до тика (= 100 нс). Есть идеи?
Обновить:
По-видимому, /StopWatch
QueryPerformanceCounter
это путь, но он может быть использован только для измерения времени, поэтому я думал о том, чтобы позвонитьDateTime.Now
когда приложение запускается, а затем простоStopWatch
запустить, а затем просто добавить прошедшее время изStopWatch
к начальному значению, возвращенному изDateTime.Now
, По крайней мере, это должно дать мне точное относительное время, верно? Что вы думаете об этом (хак)?
НОТА:
StopWatch.ElapsedTicks
отличается отStopWatch.Elapsed.Ticks
! Я использовал первый, предполагая, что 1 тик = 100 нс, но в этом случае 1 тик = 1 /StopWatch.Frequency
, Таким образом, чтобы получить тики, эквивалентные использованию DateTimeStopWatch.Elapsed.Ticks
, Я только научился этому нелегкому пути.
ЗАМЕТКА 2:
Используя подход StopWatch, я заметил, что он не синхронизирован с реальным временем. Примерно через 10 часов он опередил на 5 секунд. Так что я думаю, что нужно будет повторно синхронизировать его каждые X или около того, где X может составлять 1 час, 30 минут, 15 минут и т. Д. Я не уверен, каким будет оптимальное время для повторной синхронизации, поскольку каждая повторная синхронизация будет изменять смещение, которое может быть до 20 мс