업데이트 :이 질문은 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
매개 변수 로 전달하려는 경우 기본 매개 변수가없는 생성자를 포함하여 생성자를 호출 할 필요가 없습니다 . 이 규칙의 요점은 컴파일러가 메모리 제로화를 건너 뛸 수 있도록 확실히 확신합니다. ( 스택 포인터를 이동하는 것이 정말 느린가요?)