Je viens de rencontrer un comportement inattendu avec DateTime.UtcNow lors de certains tests unitaires. Il semble que lorsque vous appelez DateTime.Now/UtcNow en succession rapide, il semble vous rendre la même valeur pendant un intervalle de temps plus long que prévu, plutôt que de capturer des incréments de millisecondes plus précis.
Je sais qu'il existe une classe Stopwatch qui serait mieux adaptée pour effectuer des mesures de temps précises, mais j'étais curieux de savoir si quelqu'un pouvait expliquer ce comportement dans DateTime? Existe-t-il une précision officielle documentée pour DateTime.Now (par exemple, précise à moins de 50 ms?)? Pourquoi DateTime.Now serait-il moins précis que ce que la plupart des horloges CPU pourraient gérer? Peut-être qu'il est simplement conçu pour le processeur le plus petit dénominateur commun?
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();
}