MISE À JOUR: Cette question se réfère à Farseer 2.x. Le nouveau 3.x ne semble pas faire cela.
J'utilise Farseer Physics Engine pour le moment, et j'ai remarqué qu'il semble stocker beaucoup de types de valeurs temporaires en tant que membres de la classe, et non sur la pile comme on pourrait s'y attendre.
Voici un exemple de la 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;
}
Cela ressemble à une optimisation manuelle des performances. Mais je ne vois pas comment cela pourrait éventuellement améliorer les performances? (Si quoi que ce soit, je pense que cela ferait mal en rendant les objets beaucoup plus gros).
out
paramètre). Je suis assez sûr que le but de cette règle est que le compilateur puisse ignorer la mise à zéro de la mémoire - non? (Est-ce vraiment si lent de déplacer le pointeur de pile?)