AGGIORNAMENTO: questa domanda si riferisce a Farseer 2.x. Il nuovo 3.x non sembra farlo.
Al momento sto usando Farseer Physics Engine abbastanza ampiamente e ho notato che sembra memorizzare molti tipi di valore temporanei come membri della classe e non nello stack come ci si potrebbe aspettare.
Ecco un esempio dalla 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;
}
Sembra un'ottimizzazione manuale delle prestazioni. Ma non vedo come questo possa aiutare le prestazioni? (Semmai penso che danneggerebbe facendo oggetti molto più grandi).
out
parametro). Sono abbastanza sicuro che l'intero punto di questa regola sia che il compilatore possa saltare l'azzeramento di quella memoria - giusto? (È davvero così lento spostare il puntatore dello stack?)