UPDATE: Pertanyaan ini mengacu pada Farseer 2.x. 3.x yang lebih baru tampaknya tidak melakukan ini.
Saya menggunakan Farseer Physics Engine cukup luas saat ini, dan saya perhatikan bahwa tampaknya menyimpan banyak tipe nilai sementara sebagai anggota kelas, dan tidak di tumpukan seperti yang diharapkan.
Ini adalah contoh dari Body
kelas:
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;
}
Sepertinya ini adalah optimasi kinerja dengan tangan. Tetapi saya tidak melihat bagaimana ini bisa membantu kinerja? (Jika ada yang saya pikir itu akan sakit dengan membuat benda lebih besar).
out
parameter). Saya cukup yakin seluruh poin dari aturan ini adalah agar kompiler dapat melewatkan zeroing memori itu - kan? (Apakah benar - benar lambat untuk memindahkan penunjuk tumpukan?)