在op_Subtraction的帮助中,列出了两个公共方法: Subtract和op_Subtraction。它们之间的区别是什么,什么时候应该使用一个而不是另一个?
发布于 2011-02-04 23:45:45
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;所以为了回答你的问题-你应该绝对使用向量-运算符进行向量减法,除非你正在编写某种非常高性能的面向数据的东西和,你已经分析了你的代码,发现这是一个有价值的性能改进。
如果您对更多像这样的低级性能信息感兴趣,可以看看Shawn Hargreaves的Understanding XNA Framework Performance。(实际上,当在粒子系统中使用时,它包含了一个基准,比较了我在这里列出的三种方法。)
发布于 2011-02-04 14:26:48
op_Subtraction()是-运算符的实现,但除此之外它们是相同的:
vectorA - vectorB
Vector3.Subtract(vectorA, vectorB)https://stackoverflow.com/questions/4895162
复制相似问题