相关疑难解决方法(0)

C#中的++ i和i ++之间是否存在任何性能差异?

使用类似的东西是否有任何性能差异

for(int i = 0; i < 10; i++) { ... }
Run Code Online (Sandbox Code Playgroud)

for(int i = 0; i < 10; ++i) { ... }
Run Code Online (Sandbox Code Playgroud)

或者编译器是否能够以这样的方式进行优化,使它们在功能相同的情况下同样快速?

编辑:这是因为我与同事讨论过这个问题,并不是因为我觉得它在任何实际意义上都是有用的优化.它主要是学术性的.

c# performance operators

47
推荐指数
4
解决办法
2万
查看次数

在 C# 中,x+=y 和 x=x+y(x 和 y 都是简单类型)之间有什么性能差异?

在 C/C++ 中,

复合赋值运算符将简单赋值运算符与另一个二元运算符组合在一起。复合赋值运算符执行附加运算符指定的操作,然后将结果分配给左操作数。例如,复合赋值表达式,如

expression1 += expression2

可以理解为

expression1 = expression1 + expression2

然而,复合赋值表达式并不等同于扩展版本,因为复合赋值表达式只计算 expression1 一次,而扩展版本计算 expression1 两次:在加法运算和赋值运算中。

(引自Microsoft Docs


例如:

  1. 对于i+=2;,i将直接修改而不创建任何新对象。
  2. 对于i=i+2;i首先会创建一个副本。复制的一个将被修改,然后被分配回i.
        i_copied = i;
        i_copied += 2;
        i = i_copied;
Run Code Online (Sandbox Code Playgroud)

如果没有编译器的任何优化,第二种方法将构造一个无用的实例,从而降低性能。


在 C# 中,+=不允许重载类似运算符。并且所有像or一样的简单类型都声明为(这是否意味着 C# 中的所有结构实际上都是不可变的?)。intdoublereadonly struct

我不知道在C#,是有一定的表达力对象被修改(至少对于简单类型)直接,而不被创建的任何无用实例。

而且,是否有可能在C#-compiler优化表达x=x+yx+=y不如预期,如果有一个从构造函数和deconstructors无副作用。

c# operator-keyword

2
推荐指数
1
解决办法
209
查看次数

标签 统计

c# ×2

operator-keyword ×1

operators ×1

performance ×1