유니티에서 프로파일러를 사용할 때 프로젝트의 크기가 크면 Deep Profile을 사용하기 힘듭니다. 그때 사용할 수 있는 기능을 소개해 드리려고 합니다.
프로파일러를 사용하면 Self라는 항목이 있습니다.
출처 : https://docs.unity3d.com/kr/current/Manual/ProfilerCPU.html
Self는 자식을 제외한 해당 함수의 실행시간입니다. (백분율이지만 편의상 시간이라고 하겠습니다)
저는 이를, 해당 함수를 실행할 때 프로파일러에 기록되지 않은 동작의 시간으로 이해했습니다. (자식에 존재하는 함수들은 기록된 동작이기 떄문입니다)
처음 보여드린 사진처럼 Self가 높은 비중을 차지하고 있다면 해당 함수에서 무슨 일이 일어났는지 상세히 알 필요가 있습니다. 이때 사용하는 것이 Deep Profile입니다.

Deep Profile는 프로파일러 상단에 존재합니다.

Deep Profile을 킨 덕분에 Test.Update의 하위에서 무슨 동작이 부하를 일으키고 있는지 추적할 수 있게 됐습니다.
출처 : https://docs.unity3d.com/kr/2023.2/Manual/ProfilerWindow.html#deep-profiling
Deep Profile은 모든 함수 호출을 기록하기에 성능 분석에 도움은 되지만 그만큼 리소스 소모가 큽니다. 그렇기에 규모가 큰 프로젝트에서는 사용하기 힘들거나 아예 불가할 수도 있습니다.
출처 : https://docs.unity3d.com/kr/2023.2/Manual/ProfilerWindow.html#deep-profiling
Deep Profile을 사용하는 대신 ProfilerMarkers를 사용하여 수동으로 프로파일러에 기록을 할 수 있습니다.
ProfilerMarker 객체를 만들어 줍니다. 생성자에는 프로파일러에 기록될 이름을 넘겨줍니다.
프로파일러에 기록할 코드 블록을 설정해 주어야 합니다. Begin, End를 호출하거나
Auto 스코프 안에 계측할 코드 블록을 넣는 방식이 있습니다.
출처 : https://docs.unity3d.com/kr/2023.2/ScriptReference/Unity.Profiling.ProfilerMarker.Auto.html
Auto의 경우에는 Dispose 패턴을 사용하고 있습니다. 생성자에서 Begin이 호출되고, Dispose 시점에서 End가 호출됩니다.

이후 프로파일러를 확인해 보면 지정한 코드 블록이 기록되는 것을 볼 수 있습니다.
마커를 달아가면서 추적을 이어가시면 됩니다.
출처 : https://docs.unity3d.com/kr/2023.2/ScriptReference/Unity.Profiling.ProfilerMarker.html
Begin, End는 ConditionalAttribute를 활용하기에 Development 빌드가 아니면 제외됩니다.
따라서 배포 버전에서는 오버헤드를 걱정할 필요가 없습니다.

ProfilerMarker를 생성하는 대신, Profiler.BeginSample(이름)과 Profiler.EndSample을 호출하는 방법도 있습니다.
이 경우 객체를 만들 필요가 없다는 점이 장점으로 눈에 띕니다.
출처 : https://docs.unity3d.com/kr/2023.2/ScriptReference/Unity.Profiling.ProfilerMarker.html
ProfilerMarker는 오버헤드와 전송되는 데이터의 양을 줄이는 데 도움이 됩니다. Profiler.BeginSample은 전체 문자열을 전송하는 반면, ProfilerMarker.Begin은 마커의 식별자만 전송합니다.
따라서 빠르게 확인할 때는 객체를 생성할 필요가 없는 Profiler.BeginSample을 사용해도 되고, 지속적으로 모니터링할 때는 ProfilerMarker를 활용하는 것이 좋습니다.
간단한 코드로 테스트했기 때문에 효과가 미비해 보일 수 있지만, 실제 프로젝트에서는 부하가 큰 코드를 찾아낼 때 유용합니다.
성능 문제나 프로젝트 규모 때문에 Deep Profile이 제대로 동작하지 않는 환경에서는 ProfilerMarker를 활용하면 큰 도움이 됩니다. 따라서 상황에 따라 ProfilerMarker 사용을 적극 추천드립니다.