2011-02-04 33 views

回答

2

op_Subtraction(在-運營商實現)和Vector3.Subtract基本上是相同的事情。他們創建一個新的矢量與減法操作的值。 Vector3是一種值類型,所以沒有內存管理成本,但是建設成本很低。

減的其他過載是稍有不同:

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。 (實際上,它包括一個比較我在此處列出的三種方法的基準,當在粒子系統中使用時)。

+0

我對性能非常感興趣,所以我非常感謝知道如何更快地進行減法, 。 – Curyous 2011-02-06 17:31:19

1

op_Subtraction()對於-運營商實現,但否則他們是相同的:

vectorA - vectorB 
Vector3.Subtract(vectorA, vectorB) 
相關問題