Как получить временную метку точности тика в .NET / C #?

До сих пор я использовалDateTime.Now для получения меток времени, но я заметил, что если вы печатаетеDateTime.Now в цикле вы увидите, что он увеличивается в дискретных скачках ок. 15 мс Но для определенных сценариев в моем приложении мне нужно получить максимально точную временную метку, желательно с точностью до тика (= 100 нс). Есть идеи?

Обновить:

По-видимому, /StopWatchQueryPerformanceCounter это путь, но он может быть использован только для измерения времени, поэтому я думал о том, чтобы позвонить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 мс

Ответы на вопрос(10)

Ваш ответ на вопрос