【问题标题】:if(value == null) vs if(null == value) [duplicate]if(value == null) vs if(null == value) [重复]
【发布时间】:2011-12-24 08:09:35
【问题描述】:

可能重复:
Why does one often see “null != variable” instead of “variable != null” in C#?

这更像是一个好奇的问题,语句之间有没有性能差异。

 if(value == null)

 if(null == value)

这很明显吗,我经常使用 c#、PHP 和 javascript,我记得有人说 if(null == value) 更快,但真的如此吗?

我将很快开始开发一个应用程序,该应用程序将解析 TB 级的大量数据,因此即使性能提升在毫秒范围内,它也可能会产生影响。有人有什么想法吗?

【问题讨论】:

  • 您认为性能特征将适用于 3 种截然不同的语言?
  • 我不认为c#有什么不同,但最简单的方法就是写一些小代码,看看会发生什么
  • 如果你问这个问题,你对性能优化的整个想法是错误的
  • 上校。弹片“如果你问这个问题,你对性能优化的整个想法是错误的”——我很想学习,你有什么建议吗?
  • 这是我写给类似问题的答案:stackoverflow.com/questions/2437144/…

标签: c# php javascript


【解决方案1】:

我怀疑无论哪种方式都存在可衡量的性能优势。我敢打赌,告诉你这件事的人没有任何确凿的数据。

据我所知,这是一个历史文物,一种来自 C 和 C++ 的技术来防范这个错误:

if (c = null) {
}

如果你反转参数,编译器会捕捉到这一点,因为你不能给 null 赋值。

【讨论】:

    【解决方案2】:

    我分析了超过 1 亿次迭代。

    如果(值 == null)
    -- 6.85175704956 秒(每个 68.5 纳秒)
    如果(空 == 值)
    -- 6.75543808937 秒(每个 67.5 纳秒)

    因此,1 纳秒是否足以获得增益取决于您。

    【讨论】:

    • 您的测试与其说是真正的帮助,不如说是一种伤害。您假设这样的测试可以证明任何事情,这显然是错误的:首先,没有理由进行分析测试是没有意义的。它将在业余用户之间制造另一种错觉,仅此而已。其次,您没有考虑测量误差。在真正的测试中,不是那么人为的。您将看不到任何差异,因为测量误差将超过结果一英里。无论出于何种原因,发布这样的“分析结果”都无济于事。
    【解决方案3】:

    绝对没有预期的性能差异。

    使用(丑陋的)形式(if null == value) 的唯一原因是为了避免 C/C++ 特定的错字:

    if (value = null)  // compiles but _assigns_ null to value and always returns false
        ...  // never executed
    

    【讨论】:

      【解决方案4】:

      我认为没有区别是公平的:这是一个简单的案例,如果有区别,编译器会确保生成最快的版本。

      【讨论】:

        【解决方案5】:

        是的,我也认为不会有区别,但我个人更喜欢if(value == null)

        【讨论】:

          【解决方案6】:

          这样的优化最多可以为您赢得一个时钟周期(虽然我不知道为什么)。但很可能如果它更好,那么编译器会为你优化它。

          首先放置任何文字(例如null)的原因是,如果您使用= 而不是==,则不会意外分配值。不过,我个人确实觉得它的可读性较差。

          【讨论】:

            【解决方案7】:

            我不确定它是否更快,但某些语言允许您在 if 语句中进行分配而不警告您,所以如果您这样做:

            if (value = null) 错误地你可以擦除你的变量,而相反的方式不会在执行路径上进一步导致奇怪的问题。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-10-22
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多