调用System.DateTime.Now的速度

时间:2014-02-04 14:09:08

标签: c# datetime

当我运行以下代码时,它显示经过的时间等于零但是当我评论第一行时,它显示经过的时间等于20ms!为什么呢?

调用System.DateTime.Now是否在运行时加载了一些内容,这会产生差异?

string time1 = System.DateTime.Now.ToString();
var sw = System.Diagnostics.Stopwatch.StartNew();
string time = System.DateTime.Now.ToString();
string te = sw.ElapsedMilliseconds.ToString(); ;
Console.WriteLine(te);
sw.Stop();

3 个答案:

答案 0 :(得分:3)

首先,永远不会在Debug中进行分析。此外,即使在Release中,也永远不会附加调试器。您的结果是倾斜并且没有实际价值。

Release中的此代码需要0毫秒。我执行了它并验证了输出。以下是输出:

0
Press any key to continue . . .

答案 1 :(得分:1)

在反汇编mscorlib并分析结果后,DateTime.Now可能会造成20毫秒的延迟。

至少在.NET Framework 4.0版中,该属性调用内部TimeZoneInfo.GetDateTimeNowUtcOffsetFromUtc()方法。反过来,该方法调用TimeZoneInfo.s_cachedData.GetOneYearLocalFromUtc(),这可能会在第一次调用时显示性能损失(当数据尚未缓存时)。

根据该调用的结果,TimeZoneInfo.GetDateTimeNowUtcOffsetFromUtc()也可以调用TimeZoneInfo.GetIsDaylightSavingsFromUtc(),这是非常重要的,涉及日期算术。

答案 2 :(得分:-2)

导致延迟的DateTime.Now不是真的,而是ToString部分的更多。