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.

questionAnswers(10)

yourAnswerToTheQuestion