Я просто зіткнувся з якоюсь несподіваною поведінкою з DateTime.UtcNow, виконуючи деякі модульні тести. Схоже, що коли ви швидко викликаєте DateTime.Now/UtcNow, здається, це повертає вам одне і те ж значення на більш тривалий час, ніж очікувалося, замість того, щоб отримувати більш точні кроки в мілісекундах.
Я знаю, що існує клас Секундомір, який більше підходить для точного вимірювання часу, але мені було цікаво, чи хтось може пояснити цю поведінку в DateTime? Чи існує офіційна точність, задокументована для DateTime.Now (наприклад, з точністю до 50 мс?)? Чому DateTime.Now стане менш точним, ніж те, що може справити більшість годинників процесора? Можливо, він просто розроблений для найнижчого загального знаменника?
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();
}