2010-04-07 5 views
6

XNA 게임은 내용을 언로드해야하는 Unload() 메서드가 있습니다. 그러나 이것의 요점은 무엇입니까? 모든 콘텐츠가 언로드되면 게임이 종료되어야합니다.이 경우 어쨌든 모든 것이 가비지 수집됩니다. 맞습니까?XNA : Unload()의 요점은 무엇입니까?

답변

6

가비지 컬렉터가 당신에게 필요한 것을 다루기 때문에 표준적인 용도로는 유용하지 않습니다.

그러나 게임이 여러 가지 이유로 종료 될 때 호출되는 이벤트가있는 것이 유용합니다. 예를 들어, 멀티 플레이어 게임에서 모든 클라이언트에게 종료 중이라는 메시지를 보낼 수 있습니다. 그런 다음 가비지 수집기에서 네트워크 연결을 끊을 수 있습니다.

+1

프로그램을 닫을 때 모든 개체가 언로드되기 때문에 'IDisposable.Dispose()'또는 'using (...)'을 사용하면 안됩니다. –

+0

좋은 지적입니다. – Martin

+0

보호 된 Game1.OnExiting 이벤트 메서드를 재정 의하여이를 수행 할 수도 있습니다. OnExiting을 사용하여 예를 들어 게임 종료시 메시지를 보내는 것이 더 합리적입니다. –

2

너 자신 후에 청소하는 것은 항상 예의입니다 ... 그렇지 않으면 사람들은 당신이 장난감으로 놀게하는 것을 멈추게됩니다.

내 생각 엔 Game 개체를 프로젝트에 중첩시키고 나중에이를 정리할 수있는 방법을 제공하는 것입니다. 이렇게하면 코드를 더 잘 재사용 할 수 있습니다. 다행히 XNA MPV 또는 XNA 팀의 누군가가이를 찾아보다 많은 통찰력을 제공합니다.

+0

"게임"객체의 "다음"이란 의미는 무엇입니까? –

+0

그것은 내가 뚱뚱한 손가락으로 말한 '둥지'를 의미합니다 ... 고마워, 고칠 것입니다. –

+1

그다지 유용하지는 않습니다. 일단 게임 개체가 가비지 수집되면 콘텐츠 관리자가 수집되어 관리하는 모든 콘텐츠가 수집됩니다. – Martin

1

때때로 가비지 수집기를 통해 언로드되지 않는 라이브러리를 사용하여 작업 할 때 언로드가 필요한 경우가 있습니다. 한 가지 예가 XACT입니다. 개체가 GC에 의해 파괴되지 않는 특정한 경우에 언로드 이벤트에서 XACT 음악을 담당하는 개체를 파괴해야한다는 것을 기억합니다 ... 그러나 실제 시나리오를 잊어 버렸습니다 ...

그러나 더 중요한 것은 Game 클래스 대신 GameComponent 클래스의 UnloadContent 메서드. 일반적으로 GameComponent 및 DrawableGameComponent 객체는 여러 리소스를 사용할 수 있습니다. 오브젝트가 파기되면 오브젝트와 관련된 모든 자원이 파기되거나 해제되거나 보류 상태에 놓일 수 있는지 확인해야합니다.

나는 지금 당장 떠나 주시기 바랍니다. XNA 개발 및 대형 프로젝트의 경우 Unload 메서드를 사용해야하고 필요할 경우 특정 사례를 이해해야 할 수 있습니다.

관련 문제