메모리 프로파일러
개인 필요에 의해 번역한 글입니다.
꼭 원문을 참고하시길 강추드립니다.
유니티 5.3a4는 상당히 저레벨의 새로운 메모리 프로파일러 API가 있다.
이 프로파일러는 어느 오브젝트가 얼마나 많은 c++ 메모리 할당을 받았는지에
대해 찾아낼 수 있다.
IL2CPP 플랫폼에서 c#타입의 설명 뿐 아니라 전체 c# 힙의 덤프까지 제공한다.
이 API는 대부분의 사람들이 사용하기에는 너무 저레벨이다.
이 말은 이 API를 사용하기 위해 멋진 UI 윈도우가 더해지면
정말로 많은 사람에게 활용하기 유용할 것이며,
어느 오브젝트가 로드되었는지, 어느 오브젝트가 많은 메모리를 차지하는지,
그리고 가장 중요한 왜 그 오브젝트가 메모리에 있는지를 찾는데 도움을 줄 것이다.
이 레퍼지토리는 더 멋진 UI 윈도우로 작업이 진행중에 있다.
일반적인 "메모리 릭"의 패턴은 우리가 알고 있듯이,
만약 정적 필드가 있는 c#클래스에 큰 크기의 Texture2D의 레퍼런스를 가지는
오브젝트의 리스트를 가지고 있는 경우이다.
이 Texture2D는 c#에서 여전히 접근할 수 있으므로 절대 언로드 되지 않는다.
이런 경우를 파악하기는 무척 힘들다.
이 새로운 메모리 프로파일러 윈도우는 직관적으로 만들어 질 것이며,
만약 큰 Texture2D를 선택하면, Texture2D가 로드되는 원인이 되는
정적 c# 필드(클래스 이름을 포함한)에 대한 대한 레퍼런스의 역추적 정보가 표시될 것이다.
이는 il2cpp 플렛폼에서만 작동하며, 이 역추적을 하기 위해 전체 il2cpp힙이 필요하다)
우리는 유니티 제품 자체에서 저수준 레벨 API를 올려 접근하는 방식을 채택하였고,
"적절하게 유니티에 포함될 충분한 준비"로 이미 오래전에
이 메모리 프로파일러 윈도우를 오픈소스 형태로 해 두었다.
우리는 이 윈도우를 오픈소스 프로젝트로 개발할 것이다.
기부는 환영합니다.
어떤 시점에서 우리는 이 기능이 충분하다고 느낄 것이고,
그 시점에 유니티와 함께 상자 밖으로 나올 것이다.
오늘날, 이 기능의 UI 부분은 여전히 무척 힘들다.
우리는 어쨌든지 프로젝트를 오픈소스로 하기로 결정했으며,
너의 프로젝트에서 "메모리를 절약해야 하는데, 지금 우리가 무었을 할 수 있을까?" 라고 생각한다면,
너는 아마 메모리 릭을 찾는 것에 대해 더 많은 관심을 가질 것이며, 그리고
지금부터 6개월 뒤에는 이 기능의 훌륭한 버튼과 사용 경험으로 메모리 릭들을 찾을 것이다.
사용 :
- 유니티 5.3a4나 그 이상 버전 사용
- il2cpp 프로젝트로 빌드 & 실행 (어느 il2cpp 플렛폼이라도 괜찮다.)
- 이 레퍼지토리에서 프로젝트를 연다.
- 일반적인 프로파일러 윈도우를 연다.
- 일반적인 프로파일 하듯이 플레이어 연결
- 메모리 프로파일러 윈도우 열기(Window-MemoryProfilerWindow)
- "SnapShot" 클릭
- 또는 이 비디오 참조 : https://www.youtube.com/watch?v=7B6xRYMzst8
개인 생각
이 툴의 존재를 안지는 좀 되었는데 그다지 잘 활용하지 않았던 이유가 현재 프로파일러를 사용함에 있어
그다지 모자른 감이 없었고 이 툴 역시 기존 프로파일러와 같이 에디터상에서 종료시 깔끔하게
내부 캐시정보? 같은걸 정확하게 내려주지 않아서 아직 로드하지 않은 것들도 메모리에 로드되어 있어 보이기 때문이다.
물론 이 현상은 기존 프로파일러에도있어서 최적화 작업을 할 때는 보통 최대한 에셋을 클릭하지 않거나
클릭을 했다면 에디터 종료가 아니라 유니티 프로그램을 껏다 켜야 제대로 정보가 나왔다.
비주얼 적으로 훌륭하기 때문에 추천할만한 기능이다.
Reference Link
- unity technologies, MemoryProfiler
- unity community, memory profiler
-
'Unity > Unity Study' 카테고리의 다른 글
There are inconsistent line endings (2) | 2017.06.20 |
---|---|
assetbundle building, change file (0) | 2017.06.03 |
Asset Bundles vs. Resources : A Memory Showdown (0) | 2017.04.14 |
Asset Bundle Compression (0) | 2017.03.22 |
NullReferenceException: WWW class has already been disposed. (0) | 2017.03.13 |