728x90

🏆 목차.

  1. Application.lowMemory란?
  2. Application.lowMemory 활용

 

🛒 Application.lowMemory란?

 

Application.lowMemory는 백그라운드가 아닌 포그라운드에서 작동할 때 메모리가 부족해 앱이 종료되는 문제를 방지하기 위해 사용됩니다.

텍스쳐 및 오디오 클립과 같이 중요하지 않은 리소스들을 메모리 공간으로부터 해제해 줌으로써 공간을 확보할 수 있습니다.

 

 

Unity - Scripting API: Application.lowMemory

This only occurs when your app is running in the foreground. You can release non-critical assets from memory (such as, textures or audio clips) in response to this in order to avoid the app being terminated. You can also load smaller versions of such asset

docs.unity3d.com

 

🎨 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

+ Recent posts