티스토리 뷰

반응형







AssetBundle.Unload() 사용 시, 어쩔 수 없이 false를 사용해야 할 경우가 있다.


안드로이드에서는, 문제가 없었는데... 유독 날 힘들게 하는 iOS에서 문제가 생겼다. 인식 시 메모리가 증가되지만, 인식 해제시 메모리는 돌아오지 않는다는 것이다.

뭔가 의심쩍어서, System.GC.Collect()도 써봤지만 코드 문제는 아니였기 때문에 조금의 쓰레기값만 메모리로 증가되는 것을 봤다.


RAM이 2GB밖에 되지 않는, 아이폰 7으로 40MB씩 점점 차오르는 메모리를 프로파일링으로 보자니.... 아주 화가 치밀어 올랐지만 평정심을 찾고 문제점을 찾았다.

AssetBundle.Unload(false)를 할 경우, 에셋번들로 로드 된 오브젝트들은 그대로 남게되어있다. 그래서, 메모리가 줄어들지 않고 쌓여만 갔던 것이다.


그럼 이 남아있는 오브젝트들을 파괴해서 메모리를 돌려놓을 수 있는 방법은 없을까? 있다!!

그게 바로, Resources.UnloadUnusedAssets() 이다. 이건 사용하지 않는 에셋을 모두 회수하는 함수이다.


난 왜 false를 써야만 하냐면, AR 인식을 할 때 오브젝트를 보여주고, 인식이 해제되었을 때는 오브젝트를 보여주지 않아야하는데, true로 바꿔버리는 순간, 텍스처 및 쉐이더는 모두 깨져서 보여지게 되기 때문에,

false를 어쩔 수 없이 사용해야만 한다. 그래서, 인식이 되었을 땐, 에셋번들을 다운로드 해야하기 때문에, false로 언로드를 하고, lost 상태에서 저 함수를 사용해준다면, 메모리는 제대로 돌아오게 된다.



< 요약 >


1. AssetBundle.Unload(false)를 사용 한다면, Resources.UnloadUnusedAssets()로 회수해야 할 상황에 회수를 해야 메모리가 증가하지 않는다.

2. 왜 안드로이드는 그 수 많은 책들을 인식해도 메모리가 뻑이 안났을까???! 이런 상태였는데....



- 이 글에 도움이 되셨다면, 공감(♡) 버튼과 댓글 부탁드리겠습니다. - 







반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함