Vector XNA向量的减法和op_减法有什么区别?

Vector XNA向量的减法和op_减法有什么区别?,vector,xna,Vector,Xna,在XNA Vector3的帮助中,它列出了两个公共方法:减法和op_减法。它们之间有什么区别?什么时候应该使用其中一个来代替另一个?op_减法是-运算符的实现,但在其他方面它们是相同的: vectorA - vectorB Vector3.Subtract(vectorA, vectorB) op_减法是-运算符的实现,但在其他方面它们是相同的: vectorA - vectorB Vector3.Subtract(vectorA, vectorB) op_减法-运算符实现和Vector3.

在XNA Vector3的帮助中,它列出了两个公共方法:减法和op_减法。它们之间有什么区别?什么时候应该使用其中一个来代替另一个?

op_减法是-运算符的实现,但在其他方面它们是相同的:

vectorA - vectorB
Vector3.Subtract(vectorA, vectorB)
op_减法是-运算符的实现,但在其他方面它们是相同的:

vectorA - vectorB
Vector3.Subtract(vectorA, vectorB)
op_减法-运算符实现和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的文章。事实上,它包括一个基准测试,比较我在这里列出的三种方法,在粒子系统中使用时。

op\u减法-运算符实现和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的文章。事实上,它包括一个比较我在这里列出的三种方法在粒子系统中使用时的基准。

我对性能非常感兴趣,因此我非常感谢知道如何更快地进行减法运算,以及参考书。我对性能非常感兴趣,因此我非常感谢知道如何更快地进行减法运算,和参考书。