Me encontré con un comportamiento inesperado con DateTime.UtcNow mientras hacía algunas pruebas unitarias. Parece que cuando llama a DateTime.Now/UtcNow en sucesión rápida, parece devolverle el mismo valor por un intervalo de tiempo mayor de lo esperado, en lugar de capturar incrementos de milisegundos más precisos.C# DateTime.Now precisión
Sé que hay una clase de Cronómetro que sería más adecuada para hacer mediciones de tiempo precisas, pero tenía curiosidad si alguien pudiera explicar este comportamiento en DateTime? ¿Existe una precisión oficial documentada para DateTime.Now (por ejemplo, precisa dentro de 50 ms?)? ¿Por qué DateTime.Now se haría menos preciso que lo que la mayoría de los relojes de CPU podrían manejar? ¿Tal vez está diseñado para la CPU con el mínimo común denominador?
public static void Main(string[] args)
{
var stopwatch = new Stopwatch();
stopwatch.Start();
for (int i=0; i<1000; i++)
{
var now = DateTime.Now;
Console.WriteLine(string.Format(
"Ticks: {0}\tMilliseconds: {1}", now.Ticks, now.Millisecond));
}
stopwatch.Stop();
Console.WriteLine("Stopwatch.ElapsedMilliseconds: {0}",
stopwatch.ElapsedMilliseconds);
Console.ReadLine();
}
¿Cuál es el intervalo durante el cual se obtiene de vuelta el mismo valor? – ChrisF
Lea http://stackoverflow.com/questions/307582/how-frequent-is-datetime-now-updated-or-is-there-a-more-precise-api-to-get-the –
Cuando ejecuté el encima del código, obtuve solo 3 valores únicos para tics y milisegundos, y el tiempo final de detención del reloj fue de 147 ms, por lo que parece que en mi máquina solo es preciso alrededor de 50 ms ... –