[.net] DateTime.UTCNow + TimeSpan이 DateTime.Now보다 빠르다

DateTime.Now와 DateTimeOffset.Now는 느리고 DateTime.UTCNow는 빠르다. 후자를 이용해 한국 시간을 알려면 9시간을 더해야 한다. 그렇다면 이렇게 구한 시간과 전자 가운데 어느 게 더 빠를까? chatgpt는 전자가 더 빠르다고 답하기도 하고 반대로 답하기도 한다. 물어볼 때마다 다르다. 전자가 더 느리다.

textBox1.Clear();

TimeSpan offset = new(9, 0, 0);
            
TimeSpan timeSpan;
            
Stopwatch stopwatch = new();

stopwatch.Restart();

for (int i = 0; i < 2000000; i++)
{
    timeSpan = DateTime.Now.TimeOfDay;
}

stopwatch.Stop();

textBox1.AppendText($"{stopwatch.ElapsedTicks} \r\n");

stopwatch.Restart();

for (int i = 0; i < 2000000; i++)
{
    timeSpan = DateTime.UtcNow.TimeOfDay;
}

stopwatch.Stop();

textBox1.AppendText($"{stopwatch.ElapsedTicks} \r\n");

stopwatch.Restart();

for (int i = 0; i < 2000000; i++)
{
    timeSpan = DateTime.UtcNow.TimeOfDay + offset;
}

stopwatch.Stop();

textBox1.AppendText($"{stopwatch.ElapsedTicks} \r\n");
506482 
431571 
446941

표준 시간과의 차이를 표준 시간에 더하느라 조금 느려지기는 하지만 Now보다는 빠르다. 10% 넘게 차이난다.