public class Foo
{
public void Draw() // Called 60 times per second
{
spriteBatch.Draw(new Vector2(x, y), null, Color.White);
}
private float x, y;
}
특히, new Vector2(x, y)
호출이 쓰레기를 생성하는지 궁금합니다.이 샘플은 가비지를 생성합니까?
내 이해 Vector2
가 값 형이고, 참조 형의 부재로 저장되어 있지 않기 때문에, 그것은 스택에 생성 될 것이라는 점이다. 따라서 Draw
메서드가 반환 되 자마자 메모리가 자동으로 회수되어 가비지가 생성되지 않아야합니다.
맞습니까?
편집
나는 에릭 Lippert의 초기 포스트에 대한 자세한 설명을 요청하는 경우가 있습니다.
질문 1)
는 호출 된 함수의 상기 제가 파라미터가 참조 형식 또는 값 유형을 얻어 여부에 달려있다. 값 유형을 취한 후 아니오를 입력하면 여기에 가비지가 생성되지 않습니다. 참조 유형이 있으면 값이 박스에 표시됩니다.
서명이 이렇게 될 일이 그런 경우 :
public void Draw()
{
Vector2 vector = new Vector2(x, y);
spriteBatch.Draw(ref vector, null, Color.White);
}
그것은 벡터에서 쓰레기를 생성하는 것이 박스되고?
질문 2) 논리적으로는 스택에 생성되는 것을 수반하지 않는 힙에없는해서
. 등록부에있을 수 있습니다.
하지만 레지스터에 저장되는 것으로 가정하면 가비지 수집기의 관점에서 스택에 저장되는 것처럼 동작합니다. 그 맞습니까? 합니다 (Color
바와 같이)
XNA - 메소드 서명은 값으로 'Vector2'를 허용합니다. 권투 언급에 대해 +1. –
훌륭한 의견을 보내 주셔서 감사합니다.하지만 새로운 일련의 우려가 제기됩니다. 아마 제 편집을 좀 봐 주시겠습니까? –
그냥 '참조로 전달 될 때 값 유형의 복싱이 없습니다.'라는 문서를 발견했습니다. "참조로 값 유형 가져 오기"를 "참조 유형 가져 오기"와 동일하게 오해 한 것 같습니다. –