Jak uzyskać znacznik czasu precyzji zaznaczania w .NET / C #?
Do tej pory użyłemDateTime.Now
za uzyskanie znaczników czasu, ale zauważyłem, że jeśli drukujeszDateTime.Now
w pętli zauważysz, że zwiększa się w skokach o około. 15 ms. Ale w niektórych scenariuszach w mojej aplikacji muszę uzyskać możliwie najdokładniejszy znacznik czasu, najlepiej z precyzją zaznaczenia (= 100 ns). Jakieś pomysły?
Aktualizacja:
Widocznie,StopWatch
/ QueryPerformanceCounter
jest droga, ale można ją wykorzystać tylko do pomiaru czasu, więc myślałem o dzwonieniuDateTime.Now
kiedy aplikacja się uruchamia, a następnie po prostu jąStopWatch
uruchom, a następnie dodaj czas, który upłynąłStopWatch
do wartości początkowej zwróconej zDateTime.Now
. Przynajmniej to powinno dać mi dokładne relatywne znaczniki czasu, prawda? Co o tym sądzisz (hack)?
UWAGA:
StopWatch.ElapsedTicks
jest różny odStopWatch.Elapsed.Ticks
! Użyłem poprzedniej zakładając 1 tick = 100 ns, ale w tym przypadku 1 tick = 1 /StopWatch.Frequency
. Aby uzyskać znaczniki równoważne użyciu DateTimeStopWatch.Elapsed.Ticks
. Właśnie się tego nauczyłem.
UWAGA 2:
Za pomocą podejścia StopWatch zauważyłem, że zsynchronizuje się z czasem rzeczywistym. Po około 10 godzinach wyprzedził nas o 5 sekund. Sądzę więc, że trzeba będzie ponownie zsynchronizować go co X, gdzie X może wynosić 1 godzinę, 30 minut, 15 minut itd. Nie jestem pewien, jaki byłby optymalny czas do ponownej synchronizacji, ponieważ każda resyncacja zmieni przesunięcie, które może być do 20 ms.