我想知道嵌套if是否优于AND语句.我有一个循环,这么多次,所以我想更快的执行可用.下面是与我的代码具有相同逻辑的代码.嵌套的if语句位于循环内.
for ( int i = 0; i < array.length; i++)
{
// do stuff
if (x == 5)
{
if (y == 3)
{
// do stuff
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果用这个And STATEMENT替换嵌套的if,我的代码会有更大的差异吗?
if ((x == 5) && (y == 3))
// do stuff
Run Code Online (Sandbox Code Playgroud)
我已经阅读了这个链接,但我找不到答案.我是一名学生,仍然在学习,感谢所有的反馈!
不,它在性能上没有显着差异,但可读性可能存在差异.
IL在使用优化/发布(使用LINQPad测试)编译时,这两个都将生成相同的内容:
IL_0000: ldc.i4.5
IL_0001: stloc.0
IL_0002: ldc.i4.s 0A
IL_0004: stloc.1
IL_0005: ldloc.0
IL_0006: ldc.i4.5
IL_0007: bne.un.s IL_000D
IL_0009: ldloc.1
IL_000A: ldc.i4.3
IL_000B: pop
Run Code Online (Sandbox Code Playgroud)
即使没有优化,差异并不显着:
嵌套语句:
IL_0001: ldc.i4.5
IL_0002: stloc.0
IL_0003: ldc.i4.s 0A
IL_0005: stloc.1
IL_0006: ldloc.0
IL_0007: ldc.i4.5
IL_0008: ceq
IL_000A: ldc.i4.0
IL_000B: ceq
IL_000D: stloc.2
IL_000E: ldloc.2
IL_000F: brtrue.s IL_0020
IL_0011: nop
IL_0012: ldloc.1
IL_0013: ldc.i4.3
IL_0014: ceq
IL_0016: ldc.i4.0
IL_0017: ceq
IL_0019: stloc.2
IL_001A: ldloc.2
IL_001B: brtrue.s IL_001F
IL_001D: nop
IL_001E: nop
Run Code Online (Sandbox Code Playgroud)
不是嵌套语句:
IL_0001: ldc.i4.5
IL_0002: stloc.0
IL_0003: ldc.i4.s 0A
IL_0005: stloc.1
IL_0006: ldloc.0
IL_0007: ldc.i4.5
IL_0008: bne.un.s IL_0013
IL_000A: ldloc.1
IL_000B: ldc.i4.3
IL_000C: ceq
IL_000E: ldc.i4.0
IL_000F: ceq
IL_0011: br.s IL_0014
IL_0013: ldc.i4.1
IL_0014: nop
IL_0015: stloc.2
IL_0016: ldloc.2
IL_0017: brtrue.s IL_001B
IL_0019: nop
Run Code Online (Sandbox Code Playgroud)