# すべての関数呼び出しのインストルメント化

> Enable deep profiling to capture detailed function call information.

プロファイラーは、[プロファイラーマーカー](/engine/6000.0/manual/analysis/profiler/markers.md)で明示的にラップされたコードのタイミングのみをプロファイルします。これには、`MonoBehaviour.Start`、`MonoBehaviour.Update`、または同様のメソッドなど、Unity のネイティブコードからスクリプトコードへの呼び出しの最初のコールスタックの深度が含まれます。

スクリプトコードの子サンプルとして視覚化できるのは、Unity の API にコールバックするものだけです。ただし、その API がインストルメント化されている場合、または独自のコードで、プロファイラーマーカーが明示的にインストルメント化されている場合に限ります。パフォーマンスのオーバーヘッドを伴うほとんどの API 呼び出しはインストルメント化されています。例えば、`Camera.main` API を通じてメインのカメラにアクセスすると、`FindMainCamera` サンプルとして登録されます。

## 詳細プロファイリング

すべての関数呼び出しに関するデータを取得して、コードがアプリケーションのパフォーマンスにどのような影響を与えるかを把握する場合は、**Deep Profile** (詳細プロファイル) の設定を使用できます。Deep Profile の設定を有効にすると、プロファイラーがすべてのスクリプトメソッドにプロファイラーのインストルメンテーションを挿入し、Unity API への最初のコールスタックの深度を含むすべての関数呼び出しを記録します。

詳細プロファイリングはリソースに負荷がかかり、大量のメモリを使用します。そのため、プロファイリング中のアプリケーションの実行速度が大幅に低下します。詳細プロファイリングは、シンプルなスクリプトで構成されている小規模なゲームに最適です。複雑なスクリプトコードを使用すると、アプリケーションで詳細プロファイリングを使用できない場合があります。また、多くの大規模なアプリケーションでは、詳細プロファイリングによって Unity のメモリが不足する場合があります。

### 詳細プロファイリングの有効化

接続されたアプリケーションからパフォーマンスデータを収集している場合や、Unity エディターでデータを収集している場合は、詳細プロファイリングを有効にすることができます。

ビルドしたアプリケーションの詳細プロファイリングを有効にするには、以下の手順に従います。

1. **Build Profiles** ウィンドウを開きます (**File** > **Build Profiles** を選択します)
2. アプリケーションのターゲットプラットフォームを選択します
3. **Development Build** 設定を有効にします
4. **Deep Profiling** を有効にします

エディターでデータを収集するときに詳細プロファイリングを有効にするには、以下の手順に従います。

1. Profiler ウィンドウを開きます (**Window** > **Analysis** > **Profiler** を選択します)
2. [プロファイラーツールバー](/engine/6000.0/manual/analysis/profiler/window-reference.md)から **Deep Profile** を選択します

プロファイリングセッションの開始時に、プロファイラーがすべての関数呼び出しをインストルメント化します。

## 追加リソース

* [ビルドプロファイルのプロファイル設定リファレンス](/engine/6000.0/manual/analysis/profiler/collect-data/profiling-applications/build-settings-reference.md)
* [プロファイラーマーカーの概要](/engine/6000.0/manual/analysis/profiler/markers.md)
* [パフォーマンスデータ収集の概要](/engine/6000.0/manual/analysis/profiler/collect-data/profiling-collect-data-introduction.md)
