【问题标题】:Does repeated use of DateTime.Today have a performance impact? [duplicate]重复使用 DateTime.Today 是否会对性能产生影响? [复制]
【发布时间】:2017-03-08 12:53:26
【问题描述】:

重复使用 DateTime.Today 会对性能产生负面影响吗?将值保存在变量中是否更有效?

我正在编写一些函数,它们将根据今天的日期计算新日期。为此,我相对经常使用 DateTime.Today。我想知道将值保存在变量中并在 DateTime.Today 上使用该变量是否更有效,还是没有区别?

    public static DateTime GetFirstDateInThePast()
    {
        var calculatedYear = DateTime.Today.Year;
        var calculatedMonth = DateTime.Today.Month < 7 ? 1 : 7;
        var day = 1;

        return new DateTime(calculatedYear, calculatedMonth, day);
    }

        public static DateTime GetFirstDateInThePast()
    {
        var today = DateTime.Today;

        var calculatedYear = today.Year;
        var calculatedMonth = today.Month < 7 ? 1 : 7;
        var day = 1;

        return new DateTime(calculatedYear, calculatedMonth, day);
    }

【问题讨论】:

  • 好吧,如果对内部实现没有任何想法,它当然会产生影响,但它根本无法衡量,你不应该太在意它。无论实际类型如何,读取属性肯定需要一些时间。
  • 第二个选项更好。机会很低,但是如果 Day 跳到新的月份中间方法会怎样。您的数据会出现偏差
  • 除了我之前提到的:性能影响应该是微不足道的。然而实际的问题是:这段代码是你想要的吗?为此,还要考虑 xanatos 的回答。
  • 叹息,另一个重复的问题,即使我确实使用 Google 和 SO 内部搜索进行了搜索。这个较老的问题并没有令人遗憾地出现。我缺乏搜索技能吗?

标签: c# performance datetime


【解决方案1】:

第一个是道德错误...如果您的代码在 2017 年 12 月 31 日 23.59.59 左右运行会发生什么?也许Year 将是 2017Month 将是 1 :-) (发生这种情况的可能性非常非常低......可能是宇宙射线更有可能让你的电脑崩溃,因此我认为这只是道德上的错误,而不是真正的错误)

第二个是正确的。

【讨论】:

  • 好声音。虽然,我想知道,IL 会针对这个进行优化吗? (即它是否会像第二个示例一样优化为本地变量)
  • @dave 为什么要优化对外部操作系统 API 的调用(获取当前时间并由DateTime.Today 使用的那个)?编译器应该如何知道该 API 在做什么?
  • 我不是 .NET 优化方面的专家(显然)(因此我“想知道”),但只是好奇,如果两个对静态属性的调用会被“转换”为单个调用并存储在本地变量中,但是现在我已经说过我们的声音很大,我想这根本没有多大意义(特别是考虑到您实际上可能希望两个不同的日期时间非常接近)。咳咳……假装我从来没有问过……
  • @DaveBecker 假设某些内容将被优化,某些内容将被缓存,因为“这将是一个好主意”,遗憾的是错误的 :-) 假设总是改变的东西将保持不动只是因为它对你有用......就像给跑步的人拍照:-)
  • 是的,我意识到这很愚蠢,不幸的是,为时已晚 :-) &lt;HangsHeadInShame /&gt;
猜你喜欢
  • 2017-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
  • 1970-01-01
  • 2010-11-27
  • 1970-01-01
相关资源
最近更新 更多