CẬP NHẬT: Câu hỏi này đề cập đến Farseer 2.x. 3.x mới hơn dường như không làm điều này.
Hiện tại tôi đang sử dụng Công cụ Vật lý Farseer khá rộng rãi và tôi nhận thấy rằng nó dường như lưu trữ rất nhiều loại giá trị tạm thời như là thành viên của lớp, chứ không phải trên ngăn xếp như mọi người mong đợi.
Đây là một ví dụ từ Body
lớp:
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;
}
Có vẻ như nó là một tối ưu hóa hiệu suất bằng tay. Nhưng tôi không thấy làm thế nào điều này có thể giúp hiệu suất? (Nếu bất cứ điều gì tôi nghĩ rằng nó sẽ làm tổn thương bằng cách làm cho các đối tượng lớn hơn nhiều).
out
tham số). Tôi khá chắc chắn rằng toàn bộ điểm của quy tắc này là để trình biên dịch có thể bỏ qua việc xóa bộ nhớ đó - đúng không? (Có thực sự chậm khi di chuyển con trỏ ngăn xếp không?)