在重载操作符上返回一个新对象似乎是唯一要做的事情。对?C#优化重载操作符
- 如果你有一个类(X),其中包含一个大的缓冲区缓存的
- 部分包含的内容,剩下的是自由。
- 通过创建一个包含两个操作数的附加内容的新对象,您已经重载了二元+运算符来合并两个对象(相同类型)。
换句话说:
z = x + y // z is a new object containing the appended data from x and y.
这显然是一件好事,因为我们不希望在操作过程中裂伤x或y。然而,C#语言规范7.2.2说:
当二元运算符重载,相应的赋值运算符(如果有的话)也被隐式重载。
这意味着:
x += y; // will create a new x, copy contents of old x merged with y
// and the old x will be garbage collected at some point
这是痛苦的,因为它可能会更快只是y的内容复制在X的免费部分。这样我们就不会复制一个大对象,并为好垃圾收集器的人留下一个混乱。
我意识到这可以用简单的x.Add(y)来完成。我很好奇,如果有一种方法可以使用运营商。例如找出我们在赋值运算符中并执行优化的例程。
你是对的从形式语言的角度来看,这两者应该完全一样。虽然,我不确定是否有或应该有任何方法来优化这些场景。 – MandoMando 2009-11-26 17:51:53