# 에셋 로드 지표

> Monitor asset loading at runtime.

[AsyncReadManagerMetrics](/engine/6000.0/script-reference/unity-io-low-level-unsafe/async-read-manager-metrics.md) 클래스를 사용하여 런타임 에셋 로딩 및 파일 읽기 성능을 모니터링할 수 있습니다. 이 클래스는 [AsyncReadManager](/engine/6000.0/script-reference/unity-io-low-level-unsafe/async-read-manager.md)에서 관리하는 모든 파일 읽기 작업에 대한 데이터를 기록합니다.

Unity 엔진은 런타임 시 대부분의 파일을 읽기 위해 [AsyncReadManager](/engine/6000.0/script-reference/unity-io-low-level-unsafe/async-read-manager.md)를 사용합니다. AsyncReadManager로 로드되는 파일에는 에셋 번들, 어드레서블, 리소스가 포함됩니다. 또한 [AsyncReadManager.Read](/engine/6000.0/script-reference/unity-io-low-level-unsafe/async-read-manager/read.md)를 사용하여 스크립트에서 파일을 로드할 수 있습니다.

[AsyncReadManagerMetrics](/engine/6000.0/script-reference/unity-io-low-level-unsafe/async-read-manager-metrics.md) 클래스를 사용하면 지표 수집을 활성화하고 기록된 지표 데이터를 검색할 수 있습니다. 또한 분석에 도움이 되는 기록된 데이터를 필터링하고 요약할 수도 있습니다. 이 지표 정보는 에셋 로딩과 관련된 문제 영역을 식별하고 변경 사항이 에셋 로딩 성능에 미치는 영향을 측정하는 데 도움이 됩니다.

[AsyncReadManagerMetrics](/engine/6000.0/script-reference/unity-io-low-level-unsafe/async-read-manager-metrics.md) 클래스는 개발 빌드에서*만* 사용할 수 있습니다. `ENABLE_PROFILER` 심볼을 사용하여 AsyncReadManagerMetrics API에 대한 모든 호출을 #if 프리 프로세서 지시문 내에 저장해야 합니다. `ENABLE_PROFILER` 심볼은 개발 빌드에만 정의되므로 지표를 사용할 수 없는 빌드에서 스크립트를 컴파일할 수 있습니다. 이전 버전과의 호환성을 위해 `UNITY_2020_2_OR_NEWER` 심볼을 사용하여 이전 버전의 Unity에서 지표 코드를 제거할 수도 있습니다. 예시:

```lang-cs
#if ENABLE_PROFILER && UNITY_2020_2_OR_NEWER
    AsyncReadManagerMetrics.StartCollectingMetrics();
#endif
```

## 지표 컬렉션 활성화

데이터가 기록되기 전에 지표 컬렉션을 활성화해야 합니다. 다음 방법 중 하나를 사용하여 지표 컬렉션을 활성화합니다.

* [AsyncReadManagerMetrics.StartCollectingMetrics](/engine/6000.0/script-reference/unity-io-low-level-unsafe/async-read-manager-metrics/start-collecting-metrics.md) 호출
* 애플리케이션을 실행할 때 **-enable-file-read-metrics** 를 커맨드 라인 인자로 전달

**참고:** Unity 에디터 애플리케이션을 시작할 때 **-enable-file-read-metrics** 를 전달하여 플레이 모드를 시작할 때 컬렉션을 활성화할 수 있습니다. 하지만 에디터는 텍스처 같은 일부 에셋 카테고리를 자체적으로 로드하며, 플레이 모드를 시작할 때 다시 로드하지 않습니다. 파일 IO 지표에 대한 전체 정보를 얻으려면 애플리케이션의 개발 빌드에서 데이터를 수집해야 합니다.

## 지표 데이터 가져오기

[GetMetrics](/engine/6000.0/script-reference/unity-io-low-level-unsafe/async-read-manager-metrics/get-metrics.md)를 호출하여 [AsyncReadManagerMetrics](/engine/6000.0/script-reference/unity-io-low-level-unsafe/async-read-manager-metrics.md) 클래스에서 수집한 지표를 가져올 수 있습니다. 이 함수에 [AsyncReadManagerMetrics.Flags](/engine/6000.0/script-reference/unity-io-low-level-unsafe/async-read-manager-metrics/flags.md)를 전달하여 검색 후 지표를 지울지 지정합니다. 지표를 지우고 저장된 지표에서 완료된(취소 및 실패 포함) 모든 읽기를 제거합니다. 지워도 대기열에 있는 작업이나 처리 중인 작업에는 영향을 미치지 않습니다. 작업이 완료된 후 다시 [GetMetrics](/engine/6000.0/script-reference/unity-io-low-level-unsafe/async-read-manager-metrics/get-metrics.md)를 호출하여 완료되지 않은 작업의 지표에 액세스할 수 있습니다. 지표를 정기적으로 지우면 동일한 데이터를 다시 읽지 않고 시스템의 데이터 오버헤드를 줄일 수 있습니다.

```lang-cs
#if ENABLE_PROFILER && UNITY_2020_2_OR_NEWER
    AsyncReadManagerRequestMetric[] metrics 
        = AsyncReadManagerMetrics.GetMetrics(AsyncReadManagerMetrics.Flags.ClearOnRead);
#endif
```

가능한 경우 지표 데이터에는 읽기 작업에 대한 컨텍스트 정보가 포함됩니다. 이 정보에는 읽기를 요청한 [AssetLoadingSubsystem](/engine/6000.0/script-reference/unity-io-low-level-unsafe/asset-loading-subsystem.md)과 [AssetName](/engine/6000.0/script-reference/unity-io-low-level-unsafe/async-read-manager-request-metric/asset-name.md), [AssetTypeID](/engine/6000.0/script-reference/unity-io-low-level-unsafe/async-read-manager-request-metric/asset-type-id.md)가 포함됩니다. AsyncReadManager가 이 정보에 액세스할 수 없는 경우 해당 지표 필드의 값은 각각 [Other](/engine/6000.0/script-reference/unity-io-low-level-unsafe/asset-loading-subsystem/other.md), empty, 0입니다.

**참고:** 현재 지원되는 것으로 알려진 에셋 TypeID는 아래 표에 나와 있습니다. 표시될 수 있는 다른 TypeID는 [YAML 클래스 ID 레퍼런스](/engine/6000.0/manual/unity-editor/editor-features/text-scene-format/class-idreference.md)를 참조하십시오.

| TypeID | 유형 이름     |
| ------ | --------- |
| 28     | Texture2D |
| 117    | Texture3D |
| 89     | 큐브맵       |
| 43     | 메시        |

## 요약 데이터 가져오기

다음 메서드를 사용하여 AsyncReadManager 지표 요약을 가져올 수 있습니다.

* [GetCurrentSummaryMetrics](/engine/6000.0/script-reference/unity-io-low-level-unsafe/async-read-manager-metrics/get-current-summary-metrics.md) -- 지표 저장소를 마지막으로 지운 이후 수집된 모든 지표의 요약을 반환합니다.
* [GetSummaryOfMetrics](/engine/6000.0/script-reference/unity-io-low-level-unsafe/async-read-manager-metrics/get-summary-of-metrics.md) -- [GetMetrics](/engine/6000.0/script-reference/unity-io-low-level-unsafe/async-read-manager-metrics/get-metrics.md)를 호출하여 얻을 수 있는 [AsyncReadManagerRequestMetric](/engine/6000.0/script-reference/unity-io-low-level-unsafe/async-read-manager-request-metric.md)의 배열에 있는 지표 요약을 반환합니다.

예시:

```lang-cs
#if ENABLE_PROFILER && UNITY_2020_2_OR_NEWER
    AsyncReadManagerSummaryMetrics summaryOfMetrics 
        = AsyncReadManagerMetrics.GetCurrentSummaryMetrics(AsyncReadManagerMetrics.Flags.ClearOnRead);
#endif
```

또는

```lang-cs
#if ENABLE_PROFILER && UNITY_2020_2_OR_NEWER
    AsyncReadManagerRequestMetric[] metrics 
        = AsyncReadManagerMetrics.GetMetrics(AsyncReadManagerMetrics.Flags.ClearOnRead);
    AsyncReadManagerSummaryMetrics summaryOfMetrics 
        = AsyncReadManagerMetrics.GetSummaryOfMetrics(metrics);
#endif
```

지표에 대한 요약 데이터에는 다음의 통계가 포함됩니다.

* 평균 대역폭
* 평균 읽기 크기
* 로드 시간이 가장 긴 에셋 유형
* 읽기 횟수
* 요청 횟수
* 읽은 총 바이트

(전체 목록은 [AsyncReadManagerSummaryMetrics](/engine/6000.0/script-reference/unity-io-low-level-unsafe/async-read-manager-summary-metrics.md) 참조)

기본적으로 요약 통계에는 대기열에 추가되거나 진행 중인 작업을 포함한 모든 읽기 작업이 포함됩니다. 필터를 사용하여 요약을 특별히 관심 있는 작업으로 제한할 수 있습니다. 예를 들어 필터를 사용하여 요약 통계를 텍스처 에셋의 완료된 읽기 작업으로 제한할 수 있습니다.

**참고:** 요약 통계를 계산하려면 처리 리소스가 필요합니다. 이러한 계산으로 인해 기록 중인 측정이 변경되지 않도록 하려면 먼저 지표를 수집하고 분석 중인 작업이 완료된 후 요약을 가져오십시오.

### 요약 필터

다음 방법 중 하나와 함께 [AsyncReadManagerMetricsFilters](/engine/6000.0/script-reference/unity-io-low-level-unsafe/async-read-manager-metrics-filters.md)를 사용하여 요약할 데이터 유형을 지정합니다. 필터와 일치하지 않는 지표는 요약에서 제외됩니다. 다음 카테고리로 필터링할 수 있습니다.

* 에셋 유형([YAML ID](/engine/6000.0/manual/unity-editor/editor-features/text-scene-format/class-idreference.md) 기준)
* [처리 상태](/engine/6000.0/script-reference/unity-io-low-level-unsafe/processing-state.md)(읽기 작업이 대기열에 있는지, 읽는 중인지, 완료되었는지 등)
* [읽기 유형](/engine/6000.0/script-reference/unity-io-low-level-unsafe/file-read-type.md)(비동기식 또는 동기식)
* [우선 순위](/engine/6000.0/script-reference/unity-io-low-level-unsafe/priority.md)(높음 또는 낮음)
* 하위 시스템([AssetLoadingSubsystem](/engine/6000.0/script-reference/unity-io-low-level-unsafe/asset-loading-subsystem.md))

동일한 필터에 여러 카테고리를 설정할 수 있습니다. 해당 작업의 지표가 요약에 포함되려면 읽기 작업이 모든 카테고리와 일치해야 합니다. 예를 들어 필터의 [ProcessingState](/engine/6000.0/script-reference/unity-io-low-level-unsafe/processing-state.md) 및 [Subsystem](/engine/6000.0/script-reference/unity-io-low-level-unsafe/asset-loading-subsystem.md) 모두에 대한 값을 지정하여 지정된 하위 시스템에서 시작된 지정된 처리 상태의 작업만 요약할 수 있습니다.

카테고리에 여러 개의 값을 지정할 수도 있습니다. 이 경우 읽기 작업은 요약에 포함할 카테고리의 지표에 지정한 값과 일치할 수 있습니다. 예를 들어 [하위 시스템](/engine/6000.0/script-reference/unity-io-low-level-unsafe/asset-loading-subsystem.md) 카테고리에 [메시](/engine/6000.0/script-reference/unity-io-low-level-unsafe/asset-loading-subsystem/mesh.md) 및 [텍스처](/engine/6000.0/script-reference/unity-io-low-level-unsafe/asset-loading-subsystem/texture.md)를 모두 지정하여 메시 및 텍스처 에셋 모두에 대한 작업을 요약할 수 있습니다.
