创建结构值的性能

Aci*_*dic 6 c# xna struct

我正在阅读Oreilly的Learning XNA 4.0,我注意到作者很容易创建一个结构值,例如Vector2Rectangle多次,而不考虑性能.

例如,SquareCollision()检查两个游戏实体之间的碰撞的方法在Rectangle每次调用时都会创建两个s,而不是简单地让每个游戏实体保持其自己的Rectangle字段并比较这些字段而不创建任何更多的结构值.

我在很多地方已经多次看到这种模式,这让我很奇怪:
在C#中,结构值的创建是否可以忽略不计?
这真的属于微优化部分吗?

也许是因为我的经验主要是Java,ValueTypes 的概念对我来说很奇怪,但似乎从结构中重新创建一个值(并且多次调用它的构造函数)似乎是对资源的巨大浪费.

Mar*_*ell 6

在堆栈上创建一个简单使用的结构非常便宜,并且与仅为所有这些值设置局部变量没有太大区别,但是使用组件化.但是,作为对象的一部分,它将是每个对象的相同数据的附加副本.

两种方法都有效,具体取决于方案.然而,在堆栈上,没有真正的资源成本.作为对象的一部分,您需要确保不会不必要地复制数据,因为这会产生实际成本.

如果它是对象的属性,则需要复制很多次.

如果它是一个对象上的一个字段,是的:它可以在没有复制的情况下就地使用,但是:在大多数情况下这是相对较小的.

与往常一样,您需要剖析以了解它是否重要.