본문 바로가기
Works/Unity 3D

[Unity3D] Image Prefab 과 Memory

by Vader87 2020. 1. 7.
반응형

테스트 환경

Unity 2018.4.8f1 - Standalone Windows x86_64

 

테스트 코드

...
private void Load()
{
	_prefab = Resources.Load<GameObject>("3840x2160");
	_prefabs.Add(_prefab);
}

private void Unload()
{
	_prefab = null;
	Resources.UnloadUnusedAssets();
}

private void Make()
{
	_instance = Instantiate(_prefab, this.transform, false);
}

private void Delete()
{
	Destroy(_instance);
	_instance = null;
}
...

 

Profiler

Base
Resources Load
Instantiate
Destroy
Resources UnloadUnusedAssets

 

  Base Resources Load Instantiate Destroy Unload
Total Allocated 40.1MB 44.2MB 44.2MB 44.5MB 40.2MB
Texture Memory 18.6MB 22.6MB 22.6MB 22.6MB 18.6MB
Mesh Memory 0B 0B 1.0KB 1.0KB 1.0KB

 

Image 를 포함한 Prefab 은 Load 되는 순간 포함된 Texture 가 Memory 에 저장 된다. Inspector 에서 연결 해둔 Prefab 또한 Scene 로드시 같이 로드 되기 때문에 사용성이 떨어지는 Image 가 포함된 Prefab 은 필요한 시점에 Resources Load 기능을 사용해 로드 하는 것이 좋다.

참고로 Mesh Memory 가 Base 값으로 돌아가지 않아 추가 테스트를 진행 했는데, 같은 Prefab을 반복해서 Instantiate 하면 Mesh Memory 값이 계속 증가하고 모두 Destroy 한 후에는 Mesh Memory 는 그래프 상 1.0KB 이 된다. Memory Snapshot 을 확인해 보면 Not Saved 영역의 Mesh 안에 Shared UI Mesh 라는 값으로 정확히 확인 가능한데 모두 Destroy 했더라도 1.4KB 가 남는 것으로 나온다.

반응형

댓글