728x90
🏆 목차.
🛒 Application.lowMemory란?
Application.lowMemory는 백그라운드가 아닌 포그라운드에서 작동할 때 메모리가 부족해 앱이 종료되는 문제를 방지하기 위해 사용됩니다.
텍스쳐 및 오디오 클립과 같이 중요하지 않은 리소스들을 메모리 공간으로부터 해제해 줌으로써 공간을 확보할 수 있습니다.
🎨 Application.lowMemory 활용
List<Texture2D> _textures;
void Start()
{
_textures = new List<Texture2D>();
Application.lowMemory += OnLowMemory;
}
void AddTexture()
{
_textures.Add(new Texture2D(256, 256));
}
void OnLowMemory()
{
_textures = new List<Texture2D>();
Resources.UnloadUnusedAssets();
}
간단하게 코드를 작성했습니다.
위 코드에서 OnLowMemory 메서드가 Application.lowMemory 이벤트에 콜백으로 등록됨으로써 메모리 공간이 부족할 때, OnLowMemory가 호출되고 Resources.UnloadUnusedAssets가 작동하게 됩니다.
그럼 사용되지 않는 에셋들을 정리함으로써 메모리 공간을 확보할 수 있게 됩니다.
단, UnloadUnusedAssets를 호출하면 GC.MarkDependencies로 인해 프레임 드랍이 발생하게 됩니다.
OnLowMemory 메서드에서 _textures = new List<Texture2D>();를 통해 _textures 리스트를 새로 만들어줌으로써 모든 텍스처에 대한 참조가 사라지게 했습니다.
결과적으로 Garbage Collector가 이전에 생성된 텍스처들에 대한 메모리를 해제할 수 있게 됩니다.
씬 전환 시 로딩창 등 유저의 경험에 악영향을 미치지 않는 선에서 직접 호출함으로써 흐름을 제어하는 게 좋다고 생각합니다.
728x90
'유니티' 카테고리의 다른 글
[Unity 3D] 오브젝트가 컬링되는 이유 (1) | 2023.10.28 |
---|---|
[Unity] 포톤서버 방 만들기 및 입장 (2) | 2023.10.03 |
[Unity] 포톤 서버 로비 입장하기 (0) | 2023.10.02 |
[Unity] 포톤 서버 구축 (0) | 2023.10.02 |
[Unity] 최적화 : Mesh Baker(메쉬 결합) (0) | 2023.09.29 |