Obtenha tempo em milissegundos usando C#
-
26-09-2019 - |
Pergunta
Estou fazendo um programa no qual preciso obter tempo em milissegundos. Com o tempo, quero dizer um número que nunca é igual a si mesmo, e sempre é 1000 números maiores do que há um segundo. Eu tentei converter DateTime.Now
para um TimeSpan
e obtendo o TotalMilliseconds
A partir disso ... mas ouvi dizer que não é perfeitamente preciso.
Há uma maneira mais fácil de fazer isso?
Solução
Use o Stopwatch
classe.
Fornece um conjunto de métodos e propriedades que você pode usar para medir com precisão o tempo decorrido.
Há boas informações sobre como implementá -las aqui:
Testes de desempenho: medições precisas de tempo de execução com system.diagnostics.stopWatch
Outras dicas
long milliseconds = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
É assim que os vários métodos de conversão do UNIX são implementados no DateTimeOffset
Classe (.NET Framework 4.6+, .NET Standard 1.3+):
long milliseconds = DateTimeOffset.Now.ToUnixTimeMilliseconds();
o DateTime.Ticks
A propriedade obtém o número de carrapatos que representam a data e a hora.
10.000 ticks são milissegundos (10.000.000 de ticks por segundo).
Você pode tentar o QueryPerformanceCounter
método nativo. Ver http://www.pinvoke.net/default.aspx/kernel32/quererformanceCounter.html Para maiores informações. Isso é o que o Stopwatch
usos de classe.
Ver Como obter o registro de data e hora da precisão do carrapato em .NET / C#? Para maiores informações.
Stopwatch.GetTimestamp()
dá acesso a este método:
public static long GetTimestamp() {
if(IsHighResolution) {
long timestamp = 0;
SafeNativeMethods.QueryPerformanceCounter(out timestamp);
return timestamp;
}
else {
return DateTime.UtcNow.Ticks;
}
}
Eu uso a aula a seguir. Eu o encontrei na internet uma vez, postulado como o melhor AGORA().
/// <summary>Class to get current timestamp with enough precision</summary>
static class CurrentMillis
{
private static readonly DateTime Jan1St1970 = new DateTime (1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
/// <summary>Get extra long current timestamp</summary>
public static long Millis { get { return (long)((DateTime.UtcNow - Jan1St1970).TotalMilliseconds); } }
}
Fonte desconhecida.
Eu usei DateTime.now.TimeOfday.TotalmillisEconds (para o dia atual), espero que isso ajude você também.
Usar System.DateTime.Now.ToUniversalTime()
. Isso coloca sua leitura em um formato de milissegundo baseado em referência conhecido que elimina totalmente a mudança de dia, etc.