[Unity] Profiling
by Sugar0810
Profiling
한글화 문서 추천
PofilerMarker
의심이 가는 로직이 있는 코드 단위에서 묶어서 집중적으로 확인할 수 있는 클래스
실제 디바이스에서 프로파일링 하는 것을 강조
PlayMode에서 실제 디바이스를 찾아 확인할 수 있다.
유니티 프로파일러 연결할 때 체크할 것
빌드에서 띄우자마자 프로파일러에 연결하고 싶다면 해당 옵션 체
해당 옵션은 유저 스크립트의 함수 등을 깊게 볼 수 있는 내용이지만 프로파일러 오버헤드가 다른 프로파일러에 비해 커서 기본 값으로는 꺼져있다.
Unity Profilier Tool
Timeline
호출 순서, 비중, 프레임, 쓰레드들의 동기되는 모습 등 확인
Hierarchy
함수 호출 순서(콜스택)으로 볼 수 있고 수치적으로 정렬하여 파악할 수 있다.
타임라인과 하이어라키는 볼 수 있는 요소가 다르기 때문에 같이 확인하는 것을 권장
Profile Analyzer
Package Manager에서 추가 다운로드
일반 프로파일러와 비교
+ 일반에선 하나 하나 클릭하며 기억해서 비교했지만 두 가지 요소를 끌어와 동시에 성능 비교가 가능하다.
+ 일반에선 한 프레임씩 찍어서 볼 수 있었지만 영역으로 확인 가능하다.
프로파일러에선 주로 ms로 표현하게 되는데 전반적인 게임 성능을 이야기할 땐 FPS를 자주 이야기한다. 따라서 FPS를 ms로 변환하는 공식은 1000을 나누어주는 값으로 보면 된다.
30FPS -> 30/1000 = 33.33333..ms
60FPS -> 60/1000 = 16.66666..ms
디바이스 온도(쓰로틀링)
모바일의 경우 디바이스 온도에 유의할 것(발열이 높을수록 디바이스 성능이 저하됨)
Memory Profiler
Package Manager에서 Import하여 사용 가능
기능 : 메모리 프로파일링 스냅샷을 시나리오, 디바이스 별로 비교 분석할 수 있다.
구체적인 사용법은 추후에 강의
동적 메모리 관리
PC의 경우 가용 메모리를 넘어서더라도 자동으로 드랍되지 않도록 유지할 수 있는 반면, 모바일 환경에선 가용 메모리가 없으므로 즉시 드랍된다. 따라서 OS, 백그라운드 메모리 등에 유의하며 개발해야한다.
C#에선 Automatic Memory Management(동적 메모리 관리)를 해주지만 중간 자원을 수동으로 관리하여 GC 최적화할 수 있다.
ETC
Camera.main
모든 카메라를 찾고 Find Tag 메서드 작업이 들어가는 등 비용이 큰 작업이여서 2020 LTS에서 해당 코드 사용을 지양했으나 2022 LTS에선 유니티 내부적으로 캐싱된 것을 돌려주는 방식으로 개선됐다.
GetComponent<T>()
비용 소모가 크므로 Start() 메서드에서 미리 저장해두고 꺼내 사용하는 방법을 권장
'⚙️ Programming > C# & Unity' 카테고리의 다른 글
블로그의 정보
Sugar
Sugar0810