围绕SharpDX Vector结构包装Vector类 - 性能?

时间:2014-04-19 12:31:53

标签: performance vector struct sharpdx

我在使用Vector3类时遇到了一些问题,主要是因为它是一个结构,另外还因为它没有像组件被更改时那样引发事件。

最终,我希望能够写出_camera.Position.Z += 0.1f;

SharpDX.Vector3这是不可能的,因为它是一个结构,我无法修改它的组件(因为在调用_camera.Position时会返回一个副本。)

此外,我没有像ComponentsChanged那样更新我的相机视图矩阵的事件。

我决定围绕Vector3 struct 创建一个包装,它也提供了这样的事件。由于调用_camera.Position会给我一个引用,我也可以直接修改Z组件。

但是,出于性能原因,我怀疑这是不是一个好主意。

  • 将Vector3移动到类中真的很好吗?
  • 每次Vector3组件发生变化时引发事件是不是很糟糕(即使没有/一个/少用户)?

1 个答案:

答案 0 :(得分:2)

使用结构来存储向量是正确的格式,因为它在空间上更有效,并直接映射到底层C ++ API预期/返回的本机格式。

因此,对结构上的每个组件更改引发事件是不好的,也是不常见的。结构是轻量级数据,节省空间,在D3D的情况下,用于本机互操作。通常在持有值类型的类(例如相机组件)上引发事件。这是一般在.NET中有效的建议,在整个.NET框架中广泛使用