ATUALIZAÇÃO: Esta pergunta se refere ao Farseer 2.x. O 3.x mais recente não parece fazer isso.
Atualmente, estou usando o Farseer Physics Engine bastante extensivamente e notei que parece armazenar muitos tipos de valor temporário como membros da classe, e não na pilha, como seria de esperar.
Aqui está um exemplo da Body
classe:
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;
}
Parece que é uma otimização de desempenho manual. Mas não vejo como isso poderia ajudar no desempenho? (Se alguma coisa eu acho que machucaria fazendo objetos muito maiores).
out
parâmetro). Tenho certeza de que todo o objetivo desta regra é que o compilador possa pular o zeramento dessa memória - certo? (É realmente tão lento para mover o ponteiro da pilha?)