X>;之间有什么更优化的方式;0或X=0英寸C#

X>;之间有什么更优化的方式;0或X=0英寸C#,c#,if-statement,conditional,C#,If Statement,Conditional,有些情况下,当我们在一个变量中有一个值时,比如说X就是那个变量,我们希望有一个if条件,并比较如果值大于0,那么哪个方法将被优化 十> 0或X=0 有人能用逻辑来说明吗。我们可以以C#为例。理想情况下,这两条语句最终都将映射到一条CPU指令 jg - jump if greater jne - jump if not equal 突然,你的问题变得更加复杂,因为 我们需要知道哪个CPU将执行该语句 无论是8位、16位、32位还是64位比较 是跳远还是跳远 不管是签名的还是未签名的 您不仅需

有些情况下,当我们在一个变量中有一个值时,比如说X就是那个变量,我们希望有一个if条件,并比较如果值大于0,那么哪个方法将被优化

十> 0或X=0


有人能用逻辑来说明吗。我们可以以C#为例。

理想情况下,这两条语句最终都将映射到一条CPU指令

jg - jump if greater
jne - jump if not equal
突然,你的问题变得更加复杂,因为

  • 我们需要知道哪个CPU将执行该语句
  • 无论是8位、16位、32位还是64位比较
  • 是跳远还是跳远
  • 不管是签名的还是未签名的
您不仅需要查看IL代码,还需要查看JIT编译器生成的汇编指令,才能找到答案。这使得它更加复杂:

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

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

从技术上讲,这些操作符

 X > 0 
 X != 0
不平等,;实际上(一般情况下)你应该在两者之间做出选择

 X > 0 || X < 0
 X != 0
X>0 | | X<0
X!=0

显式和直接比较
X!=0更具可读性,并且速度稍快。对于内置类型
int
float
decimal
等,性能差异可以忽略不计。对于用户定义的类方程(
=
!=
)通常由于比较而更快(
=
此更改的影响非常小,除非每秒重复数十亿次,否则不会产生任何影响。
X!=0
不检查值是否大于0。它检查值是否不等于0。这是另一回事(除非变量未签名)。此外,如果这就是性能的瓶颈所在,我会非常惊讶。@Euphoric对速度没有任何影响。对于我来说,如果语句在0.072秒内完成,则I>0或I!=0的10亿个循环。@Verkade89详细描述了您的测试方法。真正的区别根本不是性能,而是好epends在类型上。对于无符号值,它可以是相同的。