Como obter timestamp de precisão de escala em .NET / C #?
Até agora eu useiDateTime.Now
para obter timestamps, mas notei que se você imprimirDateTime.Now
em um loop, você verá que ele incrementa em saltos discretos de aprox. 15 ms. Mas para determinados cenários em meu aplicativo, preciso obter o timestamp mais preciso possível, de preferência com precisão de tick (= 100 ns). Alguma ideia?
Atualizar:
Pelo visto,StopWatch
/ QueryPerformanceCounter
é o caminho a percorrer, mas só pode ser usado para medir o tempo, então eu estava pensando em chamarDateTime.Now
quando o aplicativo é iniciado e, em seguida, só temStopWatch
executar e, em seguida, basta adicionar o tempo decorrido deStopWatch
para o valor inicial retornado deDateTime.Now
. Pelo menos isso deve me dar um registro de tempo relativo preciso, certo? O que você acha disso (hack)?
NOTA:
StopWatch.ElapsedTicks
é diferente deStopWatch.Elapsed.Ticks
! Eu usei o primeiro assumindo 1 tick = 100 ns, mas neste caso 1 tick = 1 /StopWatch.Frequency
. Então, para obter carrapatos equivalentes ao uso de DateTimeStopWatch.Elapsed.Ticks
. Acabei de aprender isso da maneira mais difícil.
NOTA 2:
Usando a abordagem StopWatch, notei que fica fora de sincronia com o tempo real. Após cerca de 10 horas, estava à frente por 5 segundos. Então, eu acho que seria necessário sincronizá-lo a cada X aonde X poderia ser 1 hora, 30 min, 15 min, etc. Não tenho certeza qual seria o intervalo ideal para ressincronização, pois cada ressincronização mudaria o deslocamento que pode ser até 20 ms.