更新:この質問は、Farseer 2.xに関するものです。新しい3.xではこれができないようです。
現在、Farseer Physics Engineを非常に広範囲に使用していますが、クラスのメンバーとして多くの一時的な値の型を格納しているように見え、期待どおりにスタックに格納されていないようです。
これはBody
クラスの例です:
private Vector2 _worldPositionTemp = Vector2.Zero;
private Matrix _bodyMatrixTemp = Matrix.Identity;
private Matrix _rotationMatrixTemp = Matrix.Identity;
private Matrix _translationMatrixTemp = Matrix.Identity;
public void GetBodyMatrix(out Matrix bodyMatrix)
{
Matrix.CreateTranslation(position.X, position.Y, 0, out _translationMatrixTemp);
Matrix.CreateRotationZ(rotation, out _rotationMatrixTemp);
Matrix.Multiply(ref _rotationMatrixTemp, ref _translationMatrixTemp, out bodyMatrix);
}
public Vector2 GetWorldPosition(Vector2 localPosition)
{
GetBodyMatrix(out _bodyMatrixTemp);
Vector2.Transform(ref localPosition, ref _bodyMatrixTemp, out _worldPositionTemp);
return _worldPositionTemp;
}
手作業によるパフォーマンス最適化のようです。しかし、これがパフォーマンスにどのように役立つかわかりませんか?(もし私がオブジェクトをはるかに大きくすることでそれが傷つくと思うなら)。
out
パラメーターとして渡す)場合、コンストラクター(デフォルトのパラメーターなしのコンストラクターを含む)を呼び出す必要はありません。このルールの要点は、コンパイラがそのメモリのゼロ化をスキップできるようにするためだと私はかなり確信しています。(スタックポインターの移動が本当に遅いのですか?)