ОНОВЛЕННЯ: Це питання стосується 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
параметр). Я досить впевнений, що вся суть цього правила полягає в тому, щоб компілятор міг пропустити нулю цю пам'ять - так? (Це дійсно так повільно переміщувати покажчик стека?)