using UnityEngine;using Unity.Profiling;public class ProfilerMarkerExample{ static readonly ProfilerMarker k_MyCodeMarker = new ProfilerMarker("My Code"); void Update() { k_MyCodeMarker.Begin(); Debug.Log("This code is being profiled"); k_MyCodeMarker.End(); }}
참고: 프로파일러 마커의 이름에
/
문자를 넣지 마십시오. 프로파일러 창이 CPU Profiler 모듈의 차트 뷰에서 마커를 하이라이트할 수 없게 됩니다.
End
가 호출되기 전에
Begin
및
End
호출 사이의 코드가 범위를 벗어나지 않게 하십시오.
End
가 호출되기 전에 코드가 범위를 벗어나면 콘솔에 오류 메시지가 기록됩니다. 모든 반환 이전에
Unity는 프로파일링된 코드 블록의 실행 시간을 프로파일러에 기록하고 보고하며 CPU Profiler 모듈에 표시하므로 세부 프로파일링을 사용하지 않아도 됩니다. 해당 정보는 CPU Profiler 모듈의 계층 구조 뷰에 새 항목으로 표시됩니다.
프로파일러 창의 프로파일러 샘플.
프로파일러 마커 코드 블록 자동으로 닫기
ProfilerMarker.Auto
를 사용하여 코드 블록 끝에서
ProfilerMarker.End
가 자동으로 호출되도록 합니다. 다음 호출은 동일한 동작을 수행합니다.
using Unity.Profiling;public class MySystemClass{ static readonly ProfilerMarker k_UpdatePerfMarker = new ProfilerMarker("MySystem.Update"); public void Update() { k_UpdatePerfMarker.Begin(); // ... k_UpdatePerfMarker.End(); using (k_UpdatePerfMarker.Auto()) { // ... } }}
Begin()
및
End()
호출과는 달리 Unity는 비개발(릴리스) 빌드에서
ProfilerMarker.Auto
호출을 컴파일할 수 없습니다. 그러나 null을 반환하며 이는 최소한의 오버헤드만 발생시킵니다.
ProfilerMarker.Auto
를
using var
과 함께 사용할 수도 있으며 현재 범위가 종료되면
End
호출이 자동으로 수행됩니다. 이 방식은 코드에
ProfilerMarker
인스턴스를 추가할 때 변경해야 하는 코드의 양을 최소화합니다.
using Unity.Profiling;public class MySystemClass{ static readonly ProfilerMarker k_UpdatePerfMarker = new ProfilerMarker("MySystem.Update"); public void Update() { using var _ = k_UpdatePerfMarker.Auto(); // ... }}
참고:
ProfilerMarker
로 표시된 영역 내의 모든 비동기
await
와 모든
yield
호출은 지원되지 않으며
Auto
를 사용하더라도 콘솔에 오류 메시지가 기록됩니다.
샘플에 정수 또는 부동 소수점 파라미터 추가
코드가 장시간 실행되는 특정 조건을 밝히기 위해 코드 샘플에 관련 정보를 추가해야 할 수 있을 것입니다.
예를 들어 시스템이 여러 오브젝트의 시뮬레이션을 수행할 경우 프로파일러 샘플로 오브젝트 수를 전달할 수 있습니다. 프로파일러가 긴 샘플 길이와 함께 비정상적인 숫자를 반환한다면, 시뮬레이션을 위해 다른 스레드를 사용하거나, CPU 작업을 여러 프레임으로 분할(타임슬라이싱)하거나, 애플리케이션 설계를 조정하여 프레임 저하를 방지해야 할 수 있습니다.