Version: 2019.2
애플리케이션 프로파일링
렌더링 프로파일러

CPU 사용 프로파일러 모듈

CPU 사용 프로파일러 모듈의 차트는 애플리케이션에서 시간을 소비한 위치를 표시합니다. 이 모듈은 애플리케이션이 시간을 소비하는 모든 주요 영역(예: 렌더링, 스크립트, 애니메이션)에 대한 개요를 제공합니다. 이 섹션에서는 다음의 주제를 다룹니다.

차트 카테고리

CPU 사용 프로파일러 모듈의 차트는 애플리케이션의 메인 스레드에 사용된 시간을 추적합니다. 타이밍은 9개 카테고리로 나뉩니다. 차트 범례에 카테고리를 끌어다 놓으면 차트의 카테고리 순서를 변경할 수 있습니다. 카테고리의 컬러 범례를 클릭하여 표시 여부를 토글할 수도 있습니다.

카테고리 설명
Rendering 애플리케이션이 그래픽스 렌더링에 소비하는 시간입니다.
Scripts 애플리케이션이 스크립트 실행에 소비하는 시간입니다.
Physics 애플리케이션이 물리 엔진에 소비하는 시간입니다.
Animation 애플리케이션이 SkinnedMeshRenderers, GameObjects 및 애플리케이션 내 기타 컴포넌트에 소비하는 시간입니다. 여기에는 Animation 및 Animator 컴포넌트가 사용하는 시스템의 계산에 소비된 시간도 포함됩니다.
GarbageCollector 애플리케이션이 가비지 컬렉터 실행에 소비하는 시간입니다.
VSync targetFrameRate 또는 동기화할 다음 VBlank를 기다리는 데 프레임당 소비한 시간입니다. 이는 QualitySettings.vSyncCount 값, 타겟 프레임 속도, 또는 애플리케이션이 실행되는 플랫폼의 기본 또는 강제 VSync 설정을 따릅니다. VSync에 대한 자세한 내용은 렌더링 및 VSync 샘플 문서의 섹션을 참조하십시오.
전역 조명 애플리케이션이 조명에 소비하는 시간입니다.
UI 애플리케이션의 UI를 표시하는 데 소비하는 시간입니다.
Others 다른 카테고리에 속하지 않는 코드에 소비하는 시간으로, 전체 EditorLoop, 또는 에디터의 플레이 모드에서 프로파일링 시 프로파일링 오버헤드 등이 포함됩니다.

모듈 세부 정보 창

CPU 사용 모듈을 선택하면 모듈 세부 정보 창에 선택된 프레임에서 애플리케이션이 시간을 소비한 위치에 대한 분석이 표시됩니다. 타이밍 데이터는 타임라인 또는 계층 표로 표시할 수 있습니다. 표시 방식은 모듈 세부 정보 창의 왼쪽 상단 드롭다운을 사용하여 변경할 수 있습니다. 다음의 세 가지 뷰를 이용할 수 있습니다.

기능
Timeline 특정 프레임에 대한 타이밍 분석 데이터를 프레임 길이의 시간 축을 따라 표시합니다. 메인 스레드 이외의 스레드에 대한 타이밍은 이 뷰 모드를 통해서만 볼 수 있으며, 전체 스레드에 대한 타이밍 간 상관 관계를 지정합니다. 예를 들어 잡 시스템 워커 스레드는 메인 스레드의 시스템이 예약한 후에 시작됩니다.
Hierarchy 내부 계층 구조를 기준으로 타이밍 데이터를 그룹화합니다. 이 옵션은 기본적으로 사용된 시간을 기준으로 애플리케이션이 호출한 요소를 내림차순 리스트 포맷으로 표시합니다. 할당된 스크립팅 메모리 양(GC.Alloc) 또는 호출 횟수를 기준으로 정보를 정렬할 수도 있습니다. 표의 순서를 지정하는 열을 변경하려면 표의 열 헤더를 클릭합니다.
Raw Hierarchy 타이밍 데이터를 타이밍이 발생한 호출 스택과 유사한 계층 구조로 표시합니다. Unity는 계층 뷰에서와 같이 각 호출 스택을 병합하지 않고 이 모드에서 개별적으로 나열합니다.

타임라인 뷰

CPU 사용 프로파일러 모듈과 타임라인 뷰
CPU 사용 프로파일러 모듈과 타임라인 뷰

Timeline 뷰는 CPU 사용 프로파일러 모듈의 기본 뷰입니다. 여기에는 애플케이션에서 시간을 소비하는 위치와 타이밍 간 상관 관계에 대한 개요가 포함되어 있습니다. 타임라인 뷰는 모든 스레드의 프로파일링 데이터를 자체 하위 섹션에 동일한 시간 축을 따라 표시합니다. 이와 달리 계층 구조 뷰는 메인 스레드의 프로파일링 데이터만 표시합니다.

타임라인 뷰를 사용하여 병렬 실행 시 다른 스레드의 동작 간의 상관 관계를 확인할 수 있습니다. 또한 잡 시스템의 워커 스레드를 비롯한 다른 스레드를 사용하는 정도, 스레드 작업이 대기열에 들어가는 방식, 유휴 상태의 스레드(“Idle” 샘플) 또는 다른 스레드나 잡이 완료되기를 기다리는 스레드(“Wait for x” 샘플)가 있는지 여부를 파악할 수 있습니다.

위 스크린샷을 보면 잡 시스템의 워커 스레드에 연한 파란색 애니메이션 샘플이 있으며 메인 스레드는 애니메이션 데이터도 처리합니다. 렌더링 작업은 메인 스레드와 렌더 스레드 간에 분할됩니다. 렌더 스레드는 메인 스레드와 일치하지 않습니다. 이 특정 프레임의 처음 0.4ms 동안 렌더 스레드는 여전히 마지막 프레임을 렌더링했습니다. 마찬가지로 이 프레임은 다음 프레임의 처음 0.1ms를 차지합니다. 다른 프레임에 속하는 막대는 회색으로 표시되고, 모듈 세부 정보 창의 상단에 있는 시간 눈금자의 수직선은 메인 스레드에 있는 프레임의 시작과 끝을 표시합니다.

GPU 사용을 프로파일링하면 시간 눈금자 상단의 툴바에 CPU에서 소비된 프레임 시간과 GPU에서 소비된 프레임 시간이 표시됩니다. 이 예제에서 게임은 GPU 바운드이고 렌더링 시 CPU에서 가장 많은 시간을 소비합니다. 따라서 이 애플리케이션은 그래픽스 퍼포먼스를 최적화해야 합니다.

항목 탐색 및 선택

시간 축의 영역을 확대하려면 마우스 스크롤 휠을 사용하거나 Alt 키를 길게 누르고 마우스 오른쪽 버튼을 누른 상태로 드래그하십시오. 수평 스크롤 바의 끝을 사용하여 확대할 수도 있습니다. 키보드의 A 키를 누르면 확대가 초기화되고 전체 프레임 시간이 표시됩니다.

스레드 하단에 흰색 화살표가 표시되면 클릭하여 스레드를 펼치고 모든 라인을 표시할 수 있습니다. 다시 클릭하면 최상단 라인만 표시됩니다. 스레드를 구분하는 라인을 드래그하여 표시되는 라인 개수를 다시 조정할 수도 있습니다. 라인을 두 번 클릭하면 스레드 섹션의 높이가 호출 스택의 최대 뎁스로 설정됩니다. 뷰를 패닝하려면 마우스 가운데 버튼을 누르거나, Alt 키(macOS의 경우 Command 키)를 길게 누른 상태로 마우스 왼쪽 버튼을 누르십시오.

스레드 그룹을 접거나 펼치려면 뷰의 왼쪽 끝에 있는 스레드 이름 옆의 폴드아웃 화살표를 클릭하십시오.

CPU 차트에 대한 항목 기여도를 확인하려면 아래쪽 창에서 해당 항목을 선택하여 클릭합니다. 프로파일러는 기여도를 강조 표시하고 차트의 나머지 부분은 흐리게 표시합니다. 항목을 선택 해제하려면 뷰의 아무 곳이나 클릭하십시오. F 키를 누르면 선택한 현재 샘플에 포커스를 두고, 아무것도 선택하지 않으면 기본 줌 레벨을 표시합니다.

선택된 항목이 있는 타임라인 뷰의 CPU 사용 모듈
선택된 항목이 있는 타임라인 뷰의 CPU 사용 모듈

위 예에서 선택된 항목의 툴팁은 모든 스레드에서 이 샘플의 총 시간, 인스턴스 수 등과 같은 추가 세부 정보를 제공합니다. GC.Alloc 샘플은 자홍색으로 표시되며 할당 크기를 보여줍니다.

관리되는 호출 스택을 툴팁에 표시하려면 프로파일러 창의 툴바에 있는 Allocation Callstacks 드롭다운에서 Managed Callstacks 옵션을 활성화하십시오. 프레임을 프로파일링하기 전에 Managed Callstacks 설정을 활성화해야 해당 프레임에 대한 관리되는 호출 스택이 표시됩니다. 이 옵션은 에디터에서 프로파일링할 때에만 동작합니다. 자세한 내용은 할당 호출 스택 섹션을 참조하십시오.

타임라인 뷰에서 아무 곳이나 클릭한 후 수평으로 드래그하여 타임라인의 한 섹션에 오버레이를 표시하면 임의의 시간 범위를 수동으로 측정할 수도 있습니다. 상단의 시간 눈금자는 해당 오버레이에 포함된 시간을 표시합니다. 오버레이가 표시된 동안 F 키를 누르면 선택한 시간 섹션을 따라 뷰를 수평으로 프레이밍합니다. 오버레이를 제거하려면 아무 곳이나 클릭하십시오.

계층 구조 및 원시 계층 구조 뷰

계층 구조 또는 Raw Hierarchy 뷰로 전환하면 해당 샘플이 메인 스레드에 있는 한 선택 항목이 계속 이어집니다. 선택 항목을 즉시 찾을 수 없으면 F 키를 눌러 포커스를 맞춥니다.

CPU 사용 프로파일러 모듈과 계층 구조 뷰
CPU 사용 프로파일러 모듈과 계층 구조 뷰

계층 구조 뷰는 프로파일링한 모든 샘플을 나열하고, 공유된 호출 스택과 ProfilerMarkers 계층 구조로 그룹화합니다. Raw Hierarchy 뷰는 샘플들을 서로 그룹화하지 않으므로, 세분화된 수준으로 샘플을 살펴볼 때 유용합니다. 두 가지 뷰 모두 계층 구조의 각 항목에 대해 다음의 상세 정보를 제공합니다.

프로퍼티 기능
Total 특정 함수에 소비한 총 시간(백분율)입니다.
Self 특정 함수에 소비한 총 시간(백분율)이며, Unity가 하위 함수를 호출하는 데 소비한 시간은 제외입니다.

예를 들어 스크린샷에서 41.7%의 시간은 Camera.Render 함수에 소비한 시간입니다. 이는 수많은 드로잉 및 컬링 함수를 호출하기 때문입니다. 하지만 함수 호출을 제외하면 3.5%의 시간만 Camera.Render 함수 자체에 소비되었습니다.
Calls 이 프레임에서 이 함수를 호출한 횟수입니다. Raw Hierarchy 뷰에서 이 열의 값은 항상 1이며, 이는 프로파일러가 샘플의 계층 구조를 병합하지 않기 때문입니다.
GC Alloc Unity가 현재 프레임에 할당한 스크립팅 힙 메모리의 양입니다. 스크립팅 힙 메모리는 가비지 컬렉터에서 관리합니다.

GC.Collect()가 호출될 때마다 또는 힙의 현재 크기에 맞지 않는 스크립팅 힙 할당이 있을 때마다 가비지 컬렉터가 트리거됩니다. 또한 레퍼런스가 더 이상 없는 모든 할당을 표시하고 수집합니다. 이 프로세스는 프로파일러에서 GC.Collect 샘플로 표시됩니다.

힙에 대한 할당이 늘어날 때마다 Unity는 가비지 컬렉터를 더 자주 실행합니다. 관리되는 힙의 크기가 커지면 Unity가 메모리를 표시하고 수집하는 데 더 오래 걸립니다. 따라서 가비지 컬렉터가 프레임 속도에 영향을 미치지 않도록 만들고 전체 힙 크기를 가능한 작게 유지하려면, 애플리케이션이 실행되는 동안 GC Alloc 값을 0으로 유지해야 합니다.

관리되는 힙에 대한 자세한 내용은 자동 메모리 관리의 이해 문서를 참조하십시오.
Time ms 특정 함수에 소비한 총 시간(밀리초)입니다. 이 정보는 메인 스레드에서 소비한 시간만 포함하기 때문에 애플리케이션이 잡 시스템이나 멀티스레드 렌더링을 사용하는 경우 잘못 이해할 수 있으니 주의해야 합니다.
Self ms 특정 함수에 소비한 총 시간(밀리초)이며, Unity가 하위 함수를 호출하는 데 소비한 시간은 제외입니다.
Warning 경고 아이콘으로 표시되며, 현재 프레임 동안 경고가 트리거된 횟수를 표시합니다. 자세한 내용은 이 문서의 성능 경고 섹션을 참조하십시오.

모듈 세부 정보 창의 오른쪽 상단에 있는 Details 드롭다운에서 Show Related Objects 또는 Show Calls 뷰를 선택하면 애플리케이션이 호출하는 위치와 프로파일링된 함수를 사용하는 위치에 대한 자세한 내용을 확인할 수 있습니다.

Show Related Objects 패널
Show Related Objects 패널

Show Related Objects 뷰는 UnityEngine.Objects를 가져오는 Begin() 오버로드를 사용하여 프로파일러 샘플과 연결된 UnityEngine.Object 리스트를 표시합니다. 일부 샘플 Unity 보고서에는 렌더링을 수행하는 카메라 오브젝트에 연결된 Camera.Render 등과 같은 빌트인 샘플이 포함되어 있습니다. 이러한 오브젝트는 인스턴스 ID를 통해 보고되고 프로파일러 창의 이름으로 확인됩니다.

이러한 오브젝트 중 하나를 클릭하면 Unity는 씬 계층 구조를 통해 오브젝트를 찾아 ping합니다. 이 연결은 인스턴스 ID를 사용하므로 에디터에서 애플리케이션을 프로파일링할 때 그리고 오브젝트가 여전히 존재할 때에만 ping이 동작합니다.

GC.Alloc 샘플의 경우 이 뷰는 “N/A” 항목 리스트(이 계층 구조 레벨에서 발생한 각 할당에 대한 항목)를 표시하고 GC.Alloc 열에 할당 크기를 나열합니다. Allocation Callstacks 설정이 활성화된 상태로 에디터에서 애플리케이션을 프로파일링하고, 이 뷰에서 GC.Alloc 샘플을 선택하면 선택된 할당 스크립팅 오브젝트에 대한 호출 스택이 표시됩니다. Deep Profiling 설정을 활성화하지 않았더라도 마찬가지입니다. 자세한 내용은 이 문서의 할당 호출 스택 섹션을 참조하십시오.

Show Calls 패널
Show Calls 패널

Show Calls 패널에는 선택한 샘플이 호출되는 위치와 호출하는 다른 함수들을 표시합니다.

또한 모듈 세부 정보 창의 기어 아이콘 아래에서 Collapse Editor Only Samples 설정을 활성화하거나 비활성화할 수 있습니다. 이 설정은 에디터 전용 안전 검사로 인해 발생하는 플레이어 루프의 모든 샘플을 축소합니다. 샘플이 축소되면 GC.Alloc 값은 둘러싸는 샘플의 GC.Alloc 값에 기여하지 않습니다. 이 설정은 기본적으로 활성화됩니다. 자세한 내용은 이 문서의 에디터 전용 샘플 섹션을 참조하십시오.

일반 샘플

스크립팅 코드가 생성하는 샘플 외에도 Unity는 수많은 샘플을 통해 애플리케이션의 시간 소비에 관한 인사이트를 제공합니다. 다음 표에는 보다 더 일반적인 샘플들의 동작을 설명합니다.

메인 스레드 기본 샘플

메인 스레드 기본 샘플은 애플리케이션에 소비된 시간과 에디터 및 프로파일러 활동에 소비된 시간을 명확하게 구분합니다. 또한 레코더는 이러한 샘플을 사용하여 메인 스레드의 프레임 타이밍을 확인할 수 있습니다.

샘플 기능
PlayerLoop 애플리케이션의 메인 루프에서 시작되는 샘플의 루트입니다. 플레이어가 활성 플레이 모드의 에디터에서 실행 중일 때 Profile Editor 설정을 활성화하면 이 샘플은 EditorLoop 아래에 중첩됩니다.
EditorLoop 에디터의 메인 루프에서 시작되는 샘플의 루트입니다. 에디터에서 플레이어를 프로파일링하는 동안에만 나타납니다. Profile Editor 설정을 비활성화하면 이 샘플은 렌더링하거나 플레이어가 포함된 에디터를 실행하는 데 소비된 프레임 시간을 표시합니다.
Profiler.CollectEditorStats 다른 활성 프로파일러 모듈의 통계 수집과 관련된 샘플의 루트입니다. Profiler.CollectGlobalStats 자식 샘플 아래에 있는 모든 샘플은 플레이어의 과도한 리소스 소모를 유발합니다. 다른 모든 자식 샘플들은 에디터에만 영향을 줍니다. 특정 모듈을 비활성화하려면 해당 차트를 닫거나 Profiler.SetAreaEnabled()를 호출하십시오.

스크립트 업데이트 샘플

잡 시스템을 사용하지 않는 한 대부분의 스크립팅 코드는 다음 샘플의 아래에 중첩됩니다.

샘플 기능
Update.ScriptRunBehaviourUpdate 이 샘플에는 MonoBehaviour.Update에 대한 호출과 코루틴 처리가 들어 있습니다.
BehaviourUpdate 이 샘플은 모든 Update() 메서드를 처리합니다.
CoroutinesDelayedCalls 첫 번째 yield 이후의 코루틴 샘플이 들어 있습니다.
PreLateUpdate.ScriptRunBehaviourLateUpdate 이 샘플은 모든 LateUpdate() 메서드를 처리합니다.
FixedBehaviourUpdate 이 샘플은 모든 FixedUpdate() 메서드를 처리합니다.

렌더링 및 VSync 샘플

이 샘플은 CPU가 GPU에 대한 데이터 처리에 시간을 소비하는 위치, 또는 GPU가 완료되기를 기다리는 위치를 보여줍니다. GPU 프로파일러를 이용할 수 없거나, 리소스 소모가 과도해지는 경우에는 툴바에 이러한 정보가 표시되지 않습니다. 이 샘플은 애플리케이션이 CPU 바운드 또는 GPU 바운드인지 알려줍니다.

샘플 기능
WaitForTargetFPS 애플리케이션이 Application.targetFrameRate에 지정된 타겟 FPS를 기다리는 데 소비한 시간입니다.

이 샘플이 Gfx.WaitForPresent의 하위 샘플인 경우에는 QualitySettings.vSyncCount에 설정된 VSync를 기다리는 데 애플리케이션이 소비한 시간을 나타냅니다.

참고: 에디터는 GPU에서 VSync를 수행하지 않고 대신에 WaitForTargetFPS를 사용하여 VSync 지연을 시뮬레이션합니다. Android, iOS 등과 같은 일부 플랫폼은 VSync를 강제로 적용하거나, 30 또는 60의 기본 프레임 속도 상한을 지정합니다.
Gfx.ProcessCommands 렌더 스레드의 모든 렌더링 커맨드 처리를 포함합니다. 이 중 일부는 메인 스레드에서 VSync 또는 새 커맨드를 기다리는 데 소비한 시간일 수 있으며, Gfx.WaitForPresent 자식 샘플에서 확인할 수 있습니다.
Gfx.WaitForCommands 렌더 스레드가 새 커맨드를 수행할 준비가 되었음을 의미하며 메인 스레드의 병목 현상을 나타낼 수 있습니다.
Gfx.PresentFrame 애플리케이션이 GPU가 프레임을 렌더링하고 표시하기까지 기다린 시간을 표시하며, VSync 대기를 포함할 수 있습니다.

메인 스레드의 WaitForTargetFPS 샘플은 VSync를 기다리는 데 소비한 시간을 표시합니다.
Gfx.WaitForPresent 메인 스레드가 다음 프레임을 렌더링할 준비가 되었지만, 렌더 스레드가 GPU가 프레임 표시를 끝낼 때까지 기다리지 않았음을 의미합니다. 이는 애플리케이션이 GPU 바운드임을 표시할 수 있습니다. 렌더 스레드가 동시에 시간을 소비하는 곳을 보려면 타임라인 뷰를 확인하십시오.

렌더 스레드가 Camera.Render에서 시간을 보내면 애플리케이션은 CPU 바운드이며, 드로우 콜이나 텍스처를 GPU로 보내는 데 너무 많은 시간을 소비할 수 있습니다.

렌더 스레드가 Gfx.PresentFrame에 시간을 소비하면 게임은 GPU 바운드이거나 GPU에서 VSync를 기다리는 중일 수 있습니다. GFX.WaitForPresent의 WaitForTargetFPS 하위 샘플은 Present 단계에서 애플리케이션이 VSync를 기다리는 데 소비한 시간을 나타냅니다.

물리 샘플

다음 표에는 몇 가지 하이 레벨 물리 프로파일러 샘플이 간략하게 소개되어 있습니다. FixedUpdate는 이러한 샘플을 모두 호출합니다.

샘플 기능
Physics.Simulate 물리 엔진(PhysX)이 시뮬레이션을 실행하도록 명령하여 현재 물리의 상태를 업데이트합니다.
Physics.Processing 천이 아닌 모든 물리 작업을 처리합니다. 이 샘플을 확장하면 물리 엔진 내부에서 수행되는 작업의 로우 레벨 세부 정보가 표시됩니다.
Physics.ProcessingCloth 모든 천 물리 작업을 처리합니다. 이 샘플을 확장하면 물리 엔진 내부에서 수행되는 작업의 로우 레벨 세부 정보가 표시됩니다.
Physics.FetchResults 물리 엔진의 물리 시뮬레이션 결과를 수집합니다.
Physics.UpdateBodies 모든 물리 바디의 포지션과 회전을 업데이트합니다. 또한 이 샘플에는 이러한 업데이트가 전송될 때 전달되는 메시지도 포함되어 있습니다.
Physics.ProcessReports 물리 FixedUpdate가 끝나면 실행됩니다. 시뮬레이션 결과에 응답하는 다양한 단계를 처리합니다. 이 샘플에서는 접점, 조인트 브레이크, 트리거 업데이트 및 메시지입니다. 여기에는 다음의 네 가지 개별 하위 단계가 있습니다.
Physics.TriggerEnterExits OnTriggerEnter 및 OnTriggerExit 이벤트를 처리합니다.
Physics.TriggerStays OnTriggerStay 이벤트를 처리합니다.
Physics.Contacts OnCollisionEnter, OnCollisionExit 및 OnCollisionStay 이벤트를 처리합니다.
Physics.JointBreaks 끊어진 조인트와 관련된 업데이트와 메시지를 처리합니다.
Physics.UpdateCloth 천과 해당 스킨드 메시와 관련된 업데이트가 들어 있습니다.
Physics.Interpolation 모든 물리 오브젝트의 포지션 및 회전 보간을 관리합니다.

성능 경고

CPU 프로파일러는 몇 가지 일반적인 성능 문제를 감지하고 그에 대해 경고할 수 있습니다. 이 경고는 모듈 세부 정보 창에서 계층 구조 뷰의 Warning 열에 나타납니다.

정적 콜라이더가 이동했음을 알리는 프로파일러 경고
정적 콜라이더가 이동했음을 알리는 프로파일러 경고

프로파일러에서 감지할 수 있는 구체적인 문제는 다음과 같습니다.

  • Rigidbody.SetKinematic: 리지드바디용 비 컨벡스 메시 콜라이더를 다시 생성
  • Animation.DestroyAnimationClip: RebuildInternalState 트리거
  • Animation.AddClip: RebuildInternalState 트리거
  • Animation.RemoveClip: RebuildInternalState 트리거
  • Animation.Clone: RebuildInternalState 트리거
  • Animation.Deactivate: RebuildInternalState 트리거

할당 호출 스택

에디터에서 애플리케이션을 프로파일링하는 경우 GC.Alloc 샘플에 대한 전체 호출 스택을 확인할 수 있습니다. 이렇게 하려면 프로파일러 창의 툴바에 있는 Allocation Callstacks 드롭다운에서 Managed Allocations 설정을 활성화하십시오. 이 옵션을 활성화한 후 프로파일링하는 프레임에서 GC.Alloc 샘플이 해당 콜스택을 포함합니다.

모든 스크립팅 힙 할당은 계층 구조 뷰와 타임라인 뷰 모두에서 GC.Alloc 샘플로 표시됩니다. 타임라인 뷰에서는 밝은 자홍색으로 표시됩니다. 호출 스택을 확인하려면 CPU 프로파일러 모듈을 선택하고 타임라인 뷰에서 GC.Alloc 샘플을 선택하십시오. 그러면 호출 스택이 강조 표시되어 나타납니다.

또는 계층 구조 또는 원시 계층 구조 뷰에서 호출 스택을 확인할 수 있습니다. Details 뷰를 Show Related Objects 로 설정하십시오. GC.Alloc 샘플에는 이름이 없기 때문에 이 패널에 N/A 오브젝트로 표시됩니다. N/A 오브젝트를 선택하면 호출 스택이 Details 뷰 하단에 표시됩니다.

관리되는 할당에 관한 자세한 내용은 자동 메모리 관리 이해 문서를 참조하십시오.

GC.Alloc 호출 스택이 있는 타임라인 뷰의 CPU 사용 모듈
GC.Alloc 호출 스택이 있는 타임라인 뷰의 CPU 사용 모듈
계층 구조 뷰의 호출 스택
계층 구조 뷰의 호출 스택

에디터 전용 샘플

일부 샘플은 에디터에서 프로파일링할 때에만 존재합니다. 여기에는 null 컴포넌트 사용을 식별하는 데 유용한 GetComponentNullErrorWrapper, 오브젝트 설정을 확인하는 CheckConsistency, 파괴 검사인 CheckAllowDestructionRecursive 등 여러 보안 검사와 프리팹 관련 활동이 포함됩니다. 이러한 샘플들은 플레이어에 존재하지 않습니다.

에디터 전용 샘플이 축소된 계층 구조 뷰
에디터 전용 샘플이 축소된 계층 구조 뷰

기본적으로 에디터 전용 샘플은 계층 구조 뷰에서 축소되고 EditorOnly [SampleName]라는 이름이 지정됩니다. 이러한 샘플은 가비지 컬렉션 할당을 유발할 수 있으며, 축소된 경우 둘러싸는 샘플의 GC.Alloc 값에 기여하지 않습니다.

기본 동작을 변경하려면 모듈 세부 정보 창의 오른쪽 상단에 있는 기어 아이콘을 클릭한 후 Collapse EditorOnly Samples 옵션을 비활성화합니다. 이렇게 하면 샘플을 확장하고 해당 GC.Alloc 값을 둘러싸는 샘플에 제공할 수 있습니다.

에디터 전용 샘플이 확장된 계층 구조 뷰
에디터 전용 샘플이 확장된 계층 구조 뷰

이 옵션은 타임라인 뷰에 영향을 주지 않습니다. 이러한 샘플은 대개 무시하거나, 타겟 디바이스에서 플레이어 빌드를 프로파일링하기 위한 프롬프트로 사용하여 실제 문제를 찾을 수 있습니다.

애플리케이션 프로파일링
렌더링 프로파일러
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961