일부 단위 테스트를 수행하는 동안 DateTime.UtcNow에서 예기치 않은 동작이 발생했습니다. DateTime.Now/UtcNow를 빠르게 연속적으로 호출하면보다 정확한 밀리 초 단위를 캡처하는 대신 예상보다 긴 시간 간격 동안 동일한 값을 반환하는 것 같습니다.
정확한 시간 측정을 수행하는 데 더 적합한 Stopwatch 클래스가 있다는 것을 알고 있지만 누군가가 DateTime에서이 동작을 설명 할 수 있는지 궁금합니다. DateTime.Now에 대해 문서화 된 공식 정밀도가 있습니까 (예 : 50ms 이내의 정밀도)? 왜 DateTime.Now가 대부분의 CPU 클럭이 처리 할 수있는 것보다 덜 정확할까요? 아마도 가장 낮은 공통 분모 CPU를 위해 설계 되었을까요?
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();
}