更新:此问题涉及Farseer2.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
参数传递),则无需调用构造函数-包括默认的无参数构造函数。我相当确定这条规则的全部要点是,以便编译器可以跳过将内存归零的步骤-对吗?(移动堆栈指针的速度真的那么慢吗?)