¿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.