在XNA Vector3的帮助中,它列出的两个公共方法是Subtract和op_Subtraction。它们之间的差异是什么时候应该用来代替另一个呢?
答案 0 :(得分:2)
op_Subtraction
(-
运算符实现)和Vector3.Subtract
基本相同。它们使用减法运算的值创建一个新向量。 Vector3
是一种值类型,因此没有内存管理成本,但是建设成本很低。
Subtract的另一个重载略有不同:
void Vector3.Subtract(ref Vector3 value1, ref Vector3 value2, out Vector3 result)
这个引用了它的输入和输出。对于面向数据的编程更好(例如:物理引擎中的紧密循环,它从一个数组中获取数据并将其输出到另一个数组中)。这样可以消除构造成本和传递6个浮点数作为参数的成本,但是函数调用和解除引用的成本仍然很低。
通过直接减法可以更快地获得:
result.X = value1.X - value2.X;
result.Y = value1.Y - value2.Y;
result.Z = value1.Z - value2.Z;
当然,当您选择更快的选项时,您也会失去可读性!这更清楚:
result = value1 - value2;
所以要回答你的问题 - 你应该在进行向量减法时绝对使用向量-
运算符,除非你正在编写某种非常高性能的数据导向的东西< strong> 和 您已对自己的代码进行了分析,并认为这是一项值得提升的性能。
如果您对此类更低级别的效果信息感兴趣,请查看Shawn Hargreaves的Understanding XNA Framework Performance。 (事实上,它包括一个基准,比较我在此处列出的三种方法,当在粒子系统中使用时。)
答案 1 :(得分:1)
op_Subtraction()
是-
运算符的实现,但它们是相同的:
vectorA - vectorB
Vector3.Subtract(vectorA, vectorB)