最近、奇妙なパフォーマンスの問題が1つありました。サイクル内の時間間隔を大量の反復と比較する必要があります。DateTime.TimeOfDayプロパティを使用して、これらの間隔を比較しました。ただし、これらの比較は、DateTimeの比較と比較して非常に遅いことがわかりました。そのため、時間間隔の比較を高速化するために、1年1か月1日のDateTimeを作成する必要がありました。私が何を意味するかを示すために、小さな例を用意しました。
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DatesBenchmark
{
class Program
{
static void Main(string[] args)
{
Stopwatch sw = new Stopwatch();
sw.Start();
DateTime firstDate = DateTime.Now;
DateTime secondDate = DateTime.Now.AddSeconds(5);
for (int i = 0; i < 2000000; i++)
{
var a = firstDate.TimeOfDay > secondDate.TimeOfDay;
//var a = firstDate > secondDate;
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
Console.ReadKey();
}
}
}
ラップトップで15ミリ秒(サイクルの最初の行がコメントされている場合)に対して176ミリ秒(サイクルの2番目の行がコメントされている場合)を取得しました。
私の質問は短いです。なんで?