메모리 프로파일러

반응형

개인 필요에 의해 번역한 글입니다.

원문을 참고하시길 강추드립니다.


유니티 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

- c# 컴파일 그리고 il2cpp

- unity community, memory profiler

-

TAGS.

Comments