更改值而不是创建新实例

时间:2009-05-01 22:23:35

标签: c# .net performance

基本上我已经检查了xna和一些slimdx(Promit :)),它有很多结构。几乎所有看起来像这样的方法:

public static Vector3 operator + ( Vector3 a, Vector3 b )

做的事情如下:

Vector3 c = new Vector3 ( ... )

我想知道这样做是否有意义:

a.X += b.X
...

return a

显然#1看起来更合理/合理,但#2不会创建更快的新Vector3。

我认为它很快而且很清楚,如果不是更清楚,那就是#1。

哪一个更好? #2有什么问题吗?

2 个答案:

答案 0 :(得分:1)

2的唯一问题是,因为Vector3是一个值类型(有充分理由,请参阅Rico Mariani's blog了解详细信息),当它们属于集合或被用作集合时,您无法进行编辑。物业成员。

例如,拥有List< Vector3>是非常常见的。会员,但如果你这样做:

myList[150].X += ...;

它失败了,因为索引器返回一个NEW结构(值类型语义)。使用值类型将它们视为不可变通常更安全,这需要您的第一个语法。

答案 1 :(得分:0)

我真的怀疑你将不得不担心你需要这么做的性能。做#1。

“过早优化是所有邪恶的根源。” - 唐纳德克努特