UPDATE: คำถามนี้หมายถึง 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
พารามิเตอร์) ฉันค่อนข้างแน่ใจว่าจุดทั้งหมดของกฎนี้คือเพื่อให้คอมไพเลอร์สามารถข้าม zeroing หน่วยความจำ - ใช่ไหม? (มันคือจริงๆว่าช้าที่จะย้ายตัวชี้สแต็ค?)