GÜNCELLEME: Bu soru Farseer 2.x. Daha yeni 3.x bunu yapmıyor gibi görünüyor.
Farseer Physics Engine'i şu anda oldukça kapsamlı bir şekilde kullanıyorum ve bir çok geçici değer türünü sınıfın üyeleri olarak sakladığını fark ettim ve beklendiği gibi yığınta değil.
İşte Body
sınıftan bir örnek :
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;
}
Bir elle performans optimizasyonu gibi görünüyor. Ama bunun performansa nasıl yardımcı olabileceğini anlamıyorum? (Sanırım bir şey nesneleri daha büyük yaparak zarar verir).
out
parametre olarak geçirecekseniz ) , varsayılan parametresiz yapıcı da dahil olmak üzere bir kurucu çağırmanız gerekmez . Bu kuralın tüm noktası derleyici bu bellek sıfırlama atlayabilirsiniz eminim - değil mi? ( Yığın işaretçisini hareket ettirmek gerçekten bu kadar yavaş mı?)