.NET获取Now属性成本

时间:2011-07-05 14:39:27

标签: .net vb.net performance

我想是无用的问题,但是每次访问属性DateAndTime.Now计算当前的系统日期和时间,我想,是吗?

因此,这样做会更好:

Dim rightNow As Date = Now
For i As Integer = 0 To 1000
    If expiration < rightNow Then
        '   ...
    End If
Next

结束

For i As Integer = 0 To 1000
    If expiration < Now() Then
        '   ...
    End If
Next

我是对的吗?

5 个答案:

答案 0 :(得分:4)

你是对的,你只想根据需要进行Now()调用。

答案 1 :(得分:4)

这取决于你想要达到的目标。

如果您需要所有迭代都使用最准确的时间,那么选项1就是您的选择。

如果您需要所有迭代都使用相同的时间,那么选项2就是您的选择。

我不会过分担心调用DateTime.Now的性能,除非您已经确认它对您的应用程序产生了影响。确保您的程序正确更为重要。

答案 2 :(得分:3)

DateTime.Now进行了大量处理:

public static DateTime Now
{
  get
  {
        DateTime utcNow = DateTime.UtcNow;
        bool isAmbiguousDst = false;
        long ticks = TimeZoneInfo.GetDateTimeNowUtcOffsetFromUtc(utcNow, 
              out isAmbiguousDst).Ticks;
        long num = utcNow.Ticks + ticks;
        if (num > 3155378975999999999L)
        {
              return new DateTime(3155378975999999999L, DateTimeKind.Local);
        }
        if (num < 0L)
        {
              return new DateTime(0L, DateTimeKind.Local);
        }
        return new DateTime(num, DateTimeKind.Local, isAmbiguousDst);
  }
}

它将utcNow转换为您当地的时间。因为这种要求很贵。根据您的要求,第一个样本将为您提供更好的性能。

答案 3 :(得分:2)

这很容易测试。以下是我计算机上的平均时间:

00:00:00.0000260

00:00:00.0015428

这是一个有意义的区别吗?只有您知道它是否适合您的应用。正如其他人所指出的那样,您需要Now()的准确度如何?

答案 4 :(得分:0)

你说得对,但是如果你完成任务,就不会马上做出来......如果你得到我的漂移。

我有兴趣看到一些时间,看看两种方法之间有多大差异。