# CPU Usage Profiler モジュールの概要

> Investigate the CPU performance of your application and identify performance bottlenecks.

CPU Profiler モジュールを使用して、アプリケーションがどこに時間を費やしているか、概要を把握できます。

CPU Usage Profiler (CPU 使用量プロファイラー) モジュールは、レンダリング、スクリプト、アニメーションなど、アプリケーションが時間を費やすすべての重要な領域について、概要を示します。この情報はウィンドウの最上部にあるチャートに表示されます。個々のフレームを選択して Timeline 内のデータを検査できます。また、[Profiler ウィンドウ](/engine/6000.0/manual/analysis/profiler/window-reference.md)の下半分にある詳細ペインに、さまざまな階層ビューもあります。

## Views（視聴数）

CPU Usage Profiler モジュールは、プロファイリングデータを Timeline ビューまたは各種の階層ビューに表示します。以下のビューが選択可能です。

* # Timeline
* 階層
* Inverted Hierarchy
* Raw Hierarchy

ビューを変更するには、Profiler ウィンドウの下半分にある[ドロップダウンビューセレクター](/engine/6000.0/manual/analysis/profiler/collect-data/visualizing-data/cpu/cpu.md)を使用します。

CPU Usage Profiler モジュールでフレームが選択されている&#x20;
**Profiler ウィンドウ。Timeline ビューは詳細ペインで選択します。:**
![](/api/media?file=/engine/6000.0/media/images/profiler-cpu-module.png)

### Timeline ビュー

Timeline ビューは CPU Usage Profiler モジュールのデフォルトビューです。このビューは、アプリケーションで時間のかかる部分と、それらのタイミングが互いにどのように関連しているかについて、概要を示します。すべてのスレッドのパフォーマンスデータを、それぞれのサブセクションに、同じ時間軸に沿って表示します。

Timeline ビューを使用することで、異なるスレッドのアクティビティを並列実行した場合に、これらのアクティビティが互いにどのように相関するかを把握できます。Timeline ビューには、[ジョブシステム](/engine/6000.0/manual/scripting/optimization/job-system.md)のワーカースレッドなど、アプリケーションが各種のスレッドをどれだけ使用しているかも表示されます。また、スレッドの作業がどのようにキューに入れられているか、またはアイドル状態 (Idle サンプル) や他のスレッド/ジョブの終了を待機中 (Wait for x サンプル) のスレッドがあるかどうかも示します。

### Hierarchy ビュー

Hierarchy (階層) ビューには、一度に 1 つのスレッド (デフォルトではメインスレッド) のプロファイリングデータが表示されます。Hierarchy ビューはサンプルの継続時間のみを表示しますが、Timeline (タイムライン) ビューは各サンプルが発生した時間を表示します。

Hierarchy ビューには、プロファイルしたすべてのサンプルがリストされています。これらのサンプルは[プロファイラーマーカー](/engine/6000.0/manual/analysis/profiler/markers.md)の階層と共有コールスタックによってグループ化されます。Raw Hierarchy ビューはサンプルをグループ化しないため、サンプルを細かいレベルで調べるために適しています。

Inverted Hierarchy (反転階層) ビューは、プロファイラーマーカーによってサンプルをグループ化し、反転サンプルスタックとともに表示します。階層の最初のレベルには、各プロファイラーマーカーの項目があります。ツリーの各子項目は反転したサンプルスタックの一部を表し、そのデータは、集約された親項目のためにこのサンプルスタックを介して費やされた時間またはヒープメモリの量を示します。

Inverted Hierarchy ビューは、パフォーマンスに小規模に影響する多数のインスタンスが原因となって発生する、より大きなパフォーマンスの問題を明らかにするために役立ちます。このような問題は、Timeline ビューや非反転階層ビューでは見つけにくい場合があります。

## マネージコードコールスタックと割り当ての調査

[プロファイラーマーカー](/engine/6000.0/manual/analysis/profiler/markers.md)は、プロファイラーがプロファイリング情報を時系列や階層別に整理して表示するために使用する、サンプルのセットを出力します。プロファイラーウィンドウに表示されるすべてのサンプルは、サンプルスタックの一部です。

サンプルスタックはメソッドのコールスタックとは異なります。Unity ではすべてのサンプルが特定のメソッドに関連付けられるわけではなく、呼び出しのすべてがサンプルとして記録されてはいないからです。[Deep Profiling](/engine/6000.0/manual/analysis/profiler/collect-data/deep-profiling.md) (詳細プロファイリング) によってすべての機能呼び出しにプロファイラーマーカーが追加されますが、ネイティブコードには追加されません。また、これらのサンプルのレコーディングには、高いオーバーヘッドがかかります。

CPU Usage Profiler モジュールを使用することで、`GC.Alloc`、`UnsafeUtility.Malloc`、および `JobHandle.Complete` が出力するサンプルのコールスタック全体を検査できます。Deep Profiling を有効にして高いオーバーヘッドを発生させることなく、サンプルがどこで発生したかを追跡したい場合に便利です。コールスタックを有効にする方法については、[全コールスタックの有効化](/engine/6000.0/manual/analysis/profiler/collect-data/visualizing-data/cpu/navigating.md)を参照してください。

### マネージ割り当ての調査

CPU Usage Profiler (CPU 使用量プロファイラー) を使用して、メモリクリーンアップが実行された場所を調べることもできます。

コードが新しいマネージオブジェクトを作成するたびに、オブジェクトが現在のメモリーヒープに収まらず、[ガベージコレクション](/engine/6000.0/manual/performance-garbage-collector.md)が実行される可能性があります。ガベージコレクションによってすべてのスレッドが一時停止し、未使用メモリを探すためにマネージヒープがスキャンされます。このプロセスには時間がかかり、フレームレートを乱す場合があります。マネージガベージコレクションは、プロファイラーに `GC.Collect` サンプルとして表示され、一方でマネージ割り当ては `GC.Alloc` として表示されます。

ガベージコレクターによるアプリケーションのフレームレートへの影響を防ぐには、アプリケーションの実行中は `GC.Alloc` 値を 0 のままにし、ヒープサイズを小さく保つようにします。[Timeline ビュー](/engine/6000.0/manual/analysis/profiler/collect-data/visualizing-data/cpu/cpu.md)では、`GC.Alloc` サンプルは赤紫色で表示され、割り当てのサイズを表します。

コードのマネージ割り当てがどこで実行されたかを確認するには、[GC.Alloc の全コールスタック](/engine/6000.0/manual/analysis/profiler/collect-data/visualizing-data/cpu/navigating.md)を有効にします。マネージヒープの詳細については、[マネージメモリー](/engine/6000.0/manual/analysis/performance-memory-overview/managed-memory.md)に関するドキュメントを参照してください。

## 追加リソース

* [プロファイラーモジュールの概要](/engine/6000.0/manual/analysis/profiler/collect-data/visualizing-data/modules-introduction.md)
* [ガーベジコレクターの概要](/engine/6000.0/manual/analysis/performance-memory-overview/managed-memory/garbage-collector.md)
* [プロファイラーマーカーの概要](/engine/6000.0/manual/analysis/profiler/markers.md)
* [Profiler ウィンドウのリファレンス](/engine/6000.0/manual/analysis/profiler/window-reference.md)
