2011-02-04 7 views

答えて

2

op_Subtraction-オペレータの実装)とVector3.Subtractは、本質的に同じものです。それらは、減算操作からの値を持つ新しいベクトルを作成します。 Vector3は値型なので、メモリ管理コストはありませんが、構築コストは小さいです。

減算の他の過負荷がわずかに異なっている:

void Vector3.Subtract(ref Vector3 value1, ref Vector3 value2, out Vector3 result) 

この1つは、その入力のために、その出力のための参照を取ります。データ指向プログラミング(例えば、あるアレイからデータを取り出して別のアレイに出力する物理エンジンなどのタイトなループ)の方が優れています。これは、構築コストと引数として6つの浮動小数点数を渡すコストを取り除きますが、関数呼び出しと参照解除にはまだまだコストがかかります。

あなたは直接減算を行うことによって、より速く得ることができます:もちろん

result.X = value1.X - value2.X; 
result.Y = value1.Y - value2.Y; 
result.Z = value1.Z - value2.Z; 

、あなたがより速くオプションを選択すると、あなたはまた、読みやすさを失います!これは非常に明確である:

result = value1 - value2; 

だからあなたの質問に答えるために - ベクトル減算、を行うときあなたは非常に高性能なデータ指向のもののいくつかの種類を書いているない限り、あなたはabsolutlyベクトル-演算子を使用する必要がありますコードをプロファイリングして、パフォーマンスが向上することがわかりました。

このような低レベルのパフォーマンス情報に興味がある場合は、Shawn HargreavesのUnderstanding XNA Framework Performanceをご覧ください。 (実際には、ここで挙げた3つの方法を粒子システムで使用した場合と比較してベンチマークが含まれています)。

+0

私はパフォーマンスに非常に関心がありますので、減算をより速く行う方法、 。 – Curyous

1

op_Subtraction()-オペレータのための実装ですが、それ以外の場合は同じです:

vectorA - vectorB 
Vector3.Subtract(vectorA, vectorB) 
関連する問題