【问题标题】:C#, Are negated conditions in If statements faster? [closed]C#,If 语句中的否定条件是否更快? [关闭]
【发布时间】:2015-12-23 00:00:32
【问题描述】:

我有一位同事在与我争论说,在 if 语句中使用否定条件会更快。我反驳说编译器正在优化代码,我们真的不知道这种情况实际上会如何结束。

例如,她声称

if(!MyCondition)

if(MyCondition)

我已经搜索过,但在任何地方都找不到此参考。所以,我的问题是:

在 if 语句中使用条件时,是否真的有任何偏好来提高性能?还是只是为了更好的可读性?

【问题讨论】:

  • 问她的理由是什么。
  • 我投票决定将此问题作为题外话结束,因为没有证据表明存在任何可检测的差异。
  • @Nikita 100,000 次迭代不需要 230 毫秒,更不用说显示出那么大的差异了。编写适当的基准。
  • @Dola 这类问题的问题,尤其是在这样陈述的时候,是它们既不有趣也不符合事实。 “我的同事说 X 比 Y 快” 对那个同事来说非常好,但对互联网的其他人来说却不是。单击"race the horses" 链接,编写适当的基准,然后如果您发现有显着差异,请询问原因。
  • 这个问题已经在stackoverflow.com/questions/1029992/…讨论过

标签: c# if-statement conditional-statements


【解决方案1】:

过早的优化是万恶之源

始终追求可读性。

if ( hasRightXYZ )

if ( ! hasRightXYZ )

在可读性方面并没有什么大不了的。 但是,如果条件变得复杂,总是寻求更高的可读性。

if ( hasRightXYZ || hasRightYZX || hasRightZYX )

if ( ! hasRightXYZ && ! hasRightYZX && ! hasRightZYX )

如果您正在寻找性能改进,那么简单的否定不是您想要寻找的东西。相当典型的 N+1 Select 场景或其他一些东西。

【讨论】:

  • 确实如此。这样的编码太可怕了
  • 否定的hasRightXYZ 应该是!hasNotRightXYZ :)
  • 您可以使用Stopwatch 类来衡量两种情况下的耗时。如果有任何区别,我相信它可以忽略不计。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-07
  • 2015-06-09
  • 2017-10-03
  • 2023-03-25
  • 1970-01-01
  • 2023-03-10
相关资源
最近更新 更多