C#中X> 0或X!= 0之间的优化方式是什么?

时间:2016-12-02 07:24:17

标签: c# if-statement conditional

在某些情况下,我们在变量中有一个值,说X是该变量,我们想要一个if条件,并比较值是否大于0,那么哪个方法将被优化一个。

X> 0或X!= 0

有人可以用逻辑指定。我们可以在C#中举例。

2 个答案:

答案 0 :(得分:4)

理想情况下,两个语句最终都将映射到单个CPU指令

jg - jump if greater
jne - jump if not equal

突然间,你的问题变得复杂得多,因为

  • 我们需要知道哪个CPU确实将执行语句
  • 是否为8,16,32或64位比较
  • 是跳远还是短跳
  • 是否已签名或未签名

您不仅需要查看IL代码,还需要查看JIT编译器生成的汇编指令。这使它变得更加复杂:

  • JIT编译可能取决于.NET框架版本
  • JIT mit动态重新编译您的方法

总而言之:不在乎。 YAGNI,这是过早的优化。

答案 1 :(得分:1)

从技术上讲,这些运营商

 X > 0 
 X != 0

不相等;实际上(在一般情况下)应该在

之间进行选择
 X > 0 || X < 0
 X != 0

显式和直接比较X != 0更具可读性,速度更快。如果是内置类型intfloatdecimal等,则性能差异可忽略不计。如果用户定义的类方程(==!=)通常比较快(><; >=<=)通常涉及复杂算法的IComparer<T>IComparable<T>接口。

摘要:坚持X != 0

  1. 它更具可读性和显性
  2. 如果是内置基元类型,则性能不是问题
  3. 如果是用户定义的类型,X != 0很有可能加快速度