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