-
메모리 프로파일러 단점, 2017버전에서의 문제점일지 2020. 7. 10. 08:28
먼저, 메모리 프로파일러는 시각적으로 어떤 메모리가 많이 사용되는지 확인할 수 있다는 점에서 굉장히 훌륭한 툴이라고 할 수 있다.
그러나 이 것도 몇 가지 문제가 존재한다.
1. Take Sample 후 트리뷰에 맞게 자료구조를 짜 맞추는데 굉장히 오랜 시간이 걸린다.
2. Take Sample을 시도할 때 자주 죽는다.
3. 프로파일의 내용을 비교하기 어렵다.
일단 이 부분은 2017에서만 확인된 문제이고 아직 신 버전은 제대로 써보지 않아 확인하지 못했다.
1번의 경우 트리뷰와 인스펙터에서 각각 사용하기 위해 정보를 분할하다 보니 느리다고 이해를 할 수 있으나 2번은 왜 죽는건지 이해가 안 되는데, 이 때 사용되는 함수는 단순히 MemoryProfiler.MemorySnapshot 함수를 사용한다.
-> 커스텀 함수가 아닌 유니티에 내장된 함수를 사용했는데 문제가 있는 것은 아마 해당 함수 자체에 결함이 있는 것으로 보인다. 실제로 해당 함수는 2018버전에 들어가면서 Deprecated 되었다.
2번의 문제를 줄이기 위해서 스냅샷을 찍고 다음 스냅샷을 찍을 때 다음의 과정을 거치도록 했다.
// 스냅샷 찍기 직전에 호출 GC.Collect(); Resources.UnloadUnusedAssets(); MemorySnapshot.RequestNewSnapshot();
그리고 경험적으로 스냅샷 찍기 버튼이 연속으로 눌린 경우 100% 엔진이 죽었으며 이를 막기 위해 스냅샷 찍기를 누른 뒤엔 완료될 때까지 버튼이 비활성화 되도록 코드를 수정했다.
그래도 여전히 엔진이 멈추지만 어느정도는 나아진 것을 확인했다.
3번의 경우엔 최신 버전에서 Diff툴이 등장했기에 어느정도는 상황이 나아졌지만 역시나 한번에 두개의 비교가 전부이기 때문에 여러개를 비교하고 어떠한 경향성이 있는지 파악하기 위해서는 따로 툴을 만들어야 한다.