最近我遇到了一个奇怪的性能问题。我需要将周期中的时间间隔与大量迭代进行比较。我使用 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 毫秒(如果循环中的第二行被注释)。
我的问题很简短。为什么?