i + = a应该等于i = i + a。
在a == 1的情况下,据说它比++ i效率低,因为它涉及更多的内存访问;还是编译器使其与++ i完全相同?

最佳答案

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

        int ix = 0;
        ix++;
        ix = ix + 1;

产生:
  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

它生成完全相同的代码。抖动无能为力,只能生成同样快的机器代码。

前/后增量运算符是C#中的语法糖,请在使代码更易读的地方使用它。或许更有意义:避免在难以理解的地方使用它。他们确实有一个诀窍,可让您创建具有太多副作用的表达式。

关于c# - C#中++ i vs i + = 1有什么性能差异?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6889647/

10-12 16:08