기술 자료

Unity Engine

Unity Engine

코드에 프로파일러 마커 추가

Add profiler markers to mark up areas of your code.
읽는 시간 3분최근 업데이트: 한 달 전

코드에 프로파일러 마커를 추가하여
ProfilerMarker.Begin
,
ProfilerMarker.End
또는
ProfilerMarker.Auto
가 생성하는 샘플을 프로파일러 창에 있는 CPU Usage 모듈의 Timeline View 및 계층 구조 뷰에서 확인할 수 있습니다.

Timeline View에 메타데이터가 표시된 프로파일러 샘플.

*

계층 구조 뷰에 메타데이터 표시된 프로파일러 샘플.

선행 조건

일부 예시에서는 Profiling Core 패키지를 사용하므로 시작하기 전에 설치해야 합니다. Unity Profiling Core 패키지는 코어 패키지이므로 패키지 관리자 UI에서 검색할 수 없습니다. 패키지를 설치하려면 다음 중 하나를 수행합니다.

코드 마킹

ProfilerMarker
API를
사용하려면
ProfilerMarker.Begin
및
ProfilerMarker.End
호출 사이에 프로파일링할 코드를 넣으십시오. 예시:
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
가 호출되기 전에 코드가 범위를 벗어나면 콘솔에 오류 메시지가 기록됩니다. 모든 반환 이전에
End
를 호출하지 않도록,
Auto
를 사용해 샘플이 범위를 벗어나면 자동으로 종료되도록 하십시오. 자세한 내용은 이 기술 자료의 프로파일러 마커 코드 블록 자동으로 닫기 섹션을 참조하십시오.
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 작업을 여러 프레임으로 분할(타임슬라이싱)하거나, 애플리케이션 설계를 조정하여 프레임 저하를 방지해야 할 수 있습니다.
ProfilerMarker
는 최대 3개의 숫자 파라미터(
ProfilerMarker<TP1>
,
ProfilerMarker<TP1, TP2>
,
ProfilerMarker<TP1, TP2, TP3>
)를 지원합니다.
using Unity.Profiling;public class MySystemClass{ static readonly ProfilerMarker<int> k_PreparePerfMarker = new ProfilerMarker<int>("MySystem.Prepare", "Objects Count"); static readonly ProfilerMarker<float> k_SimulatePerfMarker = new ProfilerMarker<float>(ProfilerCategory.Scripts, "MySystem.Simulate", "Objects Density"); public void Update(int objectsCount) { k_PreparePerfMarker.Begin(objectsCount); // ... k_PreparePerfMarker.End(); using (k_SimulatePerfMarker.Auto(objectsCount * 1.0f)) { // ... } }}

샘플에 문자열 파라미터 추가

ProfilerMarker
API에서는 프로파일러 마커에 문자열 파라미터를 추가할 수 있습니다. 문자열 파라미터는 애플리케이션이 레벨 또는 데이터 파일을 로드할 때 해당 레벨 또는 파일의 이름을 표시하려는 경우에 유용합니다.
ProfilerMarkerExtension
메서드를 사용하여 문자열 파라미터를 프로파일러 샘플과 함께 전달합니다.
using Unity.Profiling;public class MySystemClass{ static readonly ProfilerMarker k_PreparePerfMarker = new ProfilerMarker("MySystem.Prepare"); public void Prepare(string path) { k_PreparePerfMarker.Begin(path); // ... k_PreparePerfMarker.End(); }}

추가 리소스