XNA 및 C#을 사용하여 게임을 개발 중이며 new struct()
코드를 각 프레임마다 호출하지 않으려 고 시도했습니다. GC를 괴롭힐 것으로 생각했습니다. "하지만 기다려라,"나는 구조체가 가치 유형이라고 스스로에게 말했다 .GC는 호출되지 않아야한다. " 글쎄, 그래서 내가 여기서 물어 보는거야.값 유형을 만들면 어떻게됩니까?
나는 값 유형에 어떤 변화가 있는지 매우 모호합니다. 함수 호출 내에서 새로운 구조체를 생성하면 스택에 구조체가 생성됩니까? 단순히 밀고 당겨서 성능이 떨어지지 않을까요? 또한 한 번의 호출로 많은 인스턴스를 생성해야한다면 메모리 제한이나 성능에 영향을 미칠 수 있습니까?
테이크는, 예를 들어,이 코드 :
spriteBatch.Draw(tex, new Rectangle(x, y, width, height), Color.White);
사각형이 경우는 구조체이다. 새로운 Rectangle이 만들어지면 어떻게됩니까? 그 줄을 여러 번 (수천 번) 반복해야한다는 의미는 무엇입니까? 이 Rectangle이 만들어지고, Draw 메서드로 전송 된 복사본이 삭제 되었습니까? (동일한 함수에서 더 많은 Draw가 그 방식으로 호출되는 것을 의미하지 않습니다.)
P. 나는 이것이 성숙한 최적화일지도 모른다는 것을 알고 있지만, 나는 대체로 궁금해서 무엇이 일어나고 있는지 더 잘 이해하고 싶다.
동일한 함수를 반복해서 호출하면 새로운 Rectangle이 각 호출을 Draw에 푸시하고 Draw가 반환 할 때 튀어 나옵니까? – Bob
예,하지만 스택 프레임을 누르고 터는 것은 포인터 (단일 기계 명령어)를 증가/감소시키는 것입니다. 그리고 JIT 컴파일러는 어쨌든 모든 것을 왕국에 최적화 할 것입니다. – thecoop
@Bob : 이론적으로 JIT *가 동일한 호출을 볼 수 있고 여러 번 제출할 값을 캐시 할 수 있다고 생각하지만이 문제를 발견하는 데 필요한 휴리스틱을 고려하면 가능성이 매우 낮습니다. , 쉽게 배제 될 수 있습니다. –