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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top