¿Cómo obtener la marca de tiempo de la precisión de tick en .NET / C #?

Hasta ahora he usadoDateTime.Now para obtener las marcas de tiempo, pero me di cuenta de que si imprimeDateTime.Now en un bucle verás que se incrementa en saltos descritos de aprox. 15 ms. Pero para ciertos escenarios en mi aplicación, necesito obtener la marca de tiempo más precisa posible, preferiblemente con una precisión de tic (= 100 ns). ¿Algunas ideas?

Actualizar:

Aparentemente,StopWatch / QueryPerformanceCounter es el camino a seguir, pero solo se puede usar para medir el tiempo, así que estaba pensando en llamarDateTime.Now cuando la aplicación se inicia y luego simplemente tieneStopWatch corre y luego simplemente agrega el tiempo transcurrido desdeStopWatch al valor inicial devuelto desdeDateTime.Now. Al menos eso debería darme las marcas de tiempo relativas precisas, ¿verdad? ¿Qué piensas de eso (hack)?

NOTA:

StopWatch.ElapsedTicks es diferente deStopWatch.Elapsed.Ticks! Usé el anterior asumiendo que 1 tick = 100 ns, pero en este caso 1 tick = 1 /StopWatch.Frequency. Así que para obtener ticks equivalentes al uso de DateTimeStopWatch.Elapsed.Ticks. Acabo de aprender esto de la manera más difícil.

NOTA 2:

Usando el enfoque de StopWatch, noté que se desincroniza con el tiempo real. Después de unas 10 horas, se adelantó por 5 segundos. Así que supongo que uno tendría que volver a sincronizar cada X donde X podría ser de 1 hora, 30 min, 15 min, etc. No estoy seguro de cuál sería el tiempo óptimo para resincronizar ya que cada resincronización cambiará el desplazamiento que puede ser Hasta 20 ms.

Respuestas a la pregunta(10)

Su respuesta a la pregunta