# コードへのプロファイリング情報の追加の概要

> Use profiler markers and counters to collect specific data about your application.

デフォルトでは、[Profiler ウィンドウ](/engine/6000.0/manual/analysis/profiler/window-reference.md) には Unity のネイティブコードに関する情報が表示されます。[ビルトインプロファイラーマーカー](/engine/6000.0/manual/analysis/profiler/markers.md) を使用して、収集したパフォーマンスデータが整理および分割されます。

独自のコードにプロファイラーマーカーを追加して、これらの領域で使用されたタイミングを [`ProfilerMarker` API](/engine/6000.0/script-reference/unity-profiling/profiler-marker.md) で Profiler ウィンドウに表示できます。

コードにプロファイラーカウンターを追加して、アプリケーションの指標データを収集したり、[カスタムプロファイラーモジュール](/engine/6000.0/manual/analysis/profiler/collect-data/visualizing-data/customizing/creating-custom-modules.md) を使用してそのデータを表示したりすることもできます。これは、アプリケーションのパフォーマンスの変化を追跡する場合に役立ちます。コードにプロファイラーカウンターを追加すると、カウンターからの情報を Unity のビルトインカウンターやインストルメンテーションのデータと組み合わせて使用できるため、パフォーマンス問題の調査が迅速化されます。

コードにメタデータ付きのカウンターとマーカーを追加するには、[Unity Profiling Core](https://docs.unity3d.com/Packages/com.unity.profiling.core@latest?subfolder=/manual/index.html) パッケージを使用する必要があります。

\*\*重要：\*\*Unity Profiling Core パッケージはコアパッケージであるため、Package Manager UI では検出できません。パッケージをインストールするには、`com.unity.profiling.core` という [名前を使って追加](/engine/6000.0/manual/packages-list/packages/upm-ui/actions/quick.md) します。[このリンクから](/engine/6000.0/manual/com-unity-profiling.md) インストールすることもできます。

## プロファイラーマーカー

[`ProfilerMarker` API](/engine/6000.0/script-reference/unity-profiling/profiler-marker.md) を使用してリソース負荷の高いスクリプトコードブロックをマークアップし、Unity プロファイラーで表示したり、[Unity Profiling Core](https://docs.unity3d.com/Packages/com.unity.profiling.core@latest?subfolder=/manual/index.html) パッケージの [`ProfilerMarker<TP1>` API](https://docs.unity3d.com/Packages/com.unity.profiling.core@1.0/api/Unity.Profiling.ProfilerMarker-1.html) を使用して、生成する各サンプルに [メタデータを追加](/engine/6000.0/manual/um-profiler-add-markers-code.md#Adding-integer-or-floating-point-parameters-to-samples) したりできます。

ビルトイン Unity プロファイラーはすべてのメソッド呼び出しをプロファイルするわけではないため、これは役に立つ場合があります。[詳細プロファイリングを使用](/engine/6000.0/manual/analysis/profiler/collect-data/deep-profiling.md) することもできますが、この場合、大きなオーバーヘッドが発生し、アプリケーションの実行速度が大幅に低下し、結果が歪みます。`ProfilerMarker` を使用すると、コードのマークアップがより効率的になります。

`ProfilerMarker` は名前付きプロファイラーハンドルを表し、コードをプロファイリングする最も効率的な方法です。アプリケーションの任意の C# コードで使用できます。

プロファイラーマーカーは、Unity が開発以外のビルドにデプロイするときにオーバーヘッドを発生させないため、好きなだけサンプルをマークアップできます。

Unity は `Begin` メソッドと `End` メソッドを [`ConditionalAttribute`](https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.conditionalattribute?view=net-8.0) でマークし、条件付きでコンパイルします。そのため、開発以外のビルドでの実行オーバーヘッドはゼロです。`Auto` メソッドは開発以外のビルドのコンパイルで完全に除外されるわけではありませんが、null を返すように条件付きでコンパイルされるため、オーバーヘッドはごくわずかです。プロファイラーマーカーのフィールドはリリースビルドに存在し、その [`IntPtr`](https://learn.microsoft.com/en-us/dotnet/api/system.intptr?view=net-8.0) と同等のメモリ (8 バイト) を使用します。

また、[`ProfilerRecorder`](/engine/6000.0/script-reference/unity-profiling/profiler-recorder.md) API はパフォーマンスデータの取得にプロファイラーマーカーを使用します。Unity エディターと開発プレイヤーでの開発中に、この API を使用してコードのさまざまな部分のパフォーマンスの概要を取得し、パフォーマンスの問題を特定できます。

## プロファイラーカウンター

Unity プロファイラーにカスタム指標を表示するには、[Unity Profiling Core](https://docs.unity3d.com/Packages/com.unity.profiling.core@latest?subfolder=/manual/index.html) パッケージの `ProfilerCounter` API を使用します。プロファイラーは [`ProfilerCounter`](https://docs.unity3d.com/Packages/com.unity.profiling.core@1.0/api/Unity.Profiling.ProfilerCounter-1.html) または [`ProfilerCounterValue`](https://docs.unity3d.com/Packages/com.unity.profiling.core@1.0/api/Unity.Profiling.ProfilerCounterValue-1.html) のデータを表示できます。

Unity は、プロファイラーカウンターを、カウンターがプロファイルする作業の種類、例えばレンダリング、スクリプト、アニメーションに基づいてカテゴリにグループ化します。カスタムのプロファイラーカウンターは、Unity のプロファイリングカテゴリのいずれかに割り当てることができます。使用可能なプロファイラーカテゴリの完全なリストについては、[`ProfilerCategory`](/engine/6000.0/script-reference/unity-profiling/profiler-category.md) を参照してください。

`ProfilerCounter` または `ProfilerCounterValue` API を使用して、アプリケーションの指標を追跡し、Unity プロファイラーやその他のコードで表示できます。Asset Store パッケージ開発者は、コードにプロファイラーカウンターを追加して、他の開発者がシステムの重要なパフォーマンス特性を理解するのを助け、この情報を最適化やバジェットのツールに使用できるようにすることができます。

以下の図は、プロファイラーカウンターのデータフローの概要を示しています。


**プロファイラーカウンターのフロー。:**
![](/api/media?file=/engine/6000.0/media/images/profiler-counter-diagram.png)

[`ProfilerRecorder`](/engine/6000.0/script-reference/unity-profiling/profiler-recorder.md) API はアプリケーションコードのプロファイラーカウンターデータを取得し、[`RawFrameDataView`](/engine/6000.0/script-reference/unity-editor-profiling/raw-frame-data-view.md) API または [`HierarchyFrameDataView`](/engine/6000.0/script-reference/unity-editor-profiling/hierarchy-frame-data-view.md) API はエディターコードのプロファイラーカウンターデータを取得します。このカウンターデータは、[モジュールエディターでカスタムプロファイラーモジュールを設定](/engine/6000.0/manual/analysis/profiler/adding-information-code/creating-custom-counters.md) することで、Profiler ウィンドウで表示できます。

`ProfilerCounter` と `ProfilerCounterValue` は以下の型をサポートしています。

* int
* long
* 浮動小数点
* double

## 追加リソース

* [コードへのプロファイラーマーカーの追加](/engine/6000.0/manual/analysis/profiler/adding-information-code/add-markers-code.md)
* [コードへのプロファイラーカウンターの追加](/engine/6000.0/manual/analysis/profiler/adding-information-code/add-counters-code.md)
* [プロファイラーカウンターの可視化](/engine/6000.0/manual/analysis/profiler/adding-information-code/creating-custom-counters.md)
* [`ProfilerMarker` API](/engine/6000.0/script-reference/unity-profiling/profiler-marker.md)
* [Profiling Core パッケージ](https://docs.unity3d.com/Packages/com.unity.profiling.core@latest)
