在C#中,++ i与i + = 1有任何性能差异吗?

Erw*_*yer 4 c# performance increment

i + = a应该等于i = i + a.在a == 1的情况下,这被认为效率低于++ i,因为它涉及更多的内存访问; 或者编译器会使它与++ i完全相同吗?

Han*_*ant 12

很容易回答:C#编译器将C#源代码转换为IL操作码.没有专用的IL操作码执行与++运算符等效的操作.如果您使用ildasm.exe工具查看生成的IL,这很容易看到.此示例C#片段:

        int ix = 0;
        ix++;
        ix = ix + 1;
Run Code Online (Sandbox Code Playgroud)

产生:

  IL_0000:  ldc.i4.0               // load 0
  IL_0001:  stloc.0                // ix = 0

  IL_0002:  ldloc.0                // load ix
  IL_0003:  ldc.i4.1               // load 1
  IL_0004:  add                    // ix + 1
  IL_0005:  stloc.0                // ix = ix + 1

  IL_0006:  ldloc.0                // load ix
  IL_0007:  ldc.i4.1               // load 1
  IL_0008:  add                    // ix + 1
  IL_0009:  stloc.0                // ix = ix + 1
Run Code Online (Sandbox Code Playgroud)

它生成完全相同的代码.抖动不能做什么,只能生成同样快速的机器代码.

前/后增量运算符是C#中的语法糖,只要它使代码更清晰,就可以使用它.或者更相关:避免它使它不那么清晰.他们确实有一个诀窍,让你创建具有太多副作用的表达式.