CPU Profiler モジュールを使用して、アプリケーションがどこに時間を費やしているか、概要を把握できます。
CPU Usage Profiler (CPU 使用量プロファイラー) モジュールは、レンダリング、スクリプト、アニメーションなど、アプリケーションが時間を費やすすべての重要な領域について、概要を示します。この情報はウィンドウの最上部にあるチャートに表示されます。個々のフレームを選択して Timeline 内のデータを検査できます。また、Profiler ウィンドウの下半分にある詳細ペインに、さまざまな階層ビューもあります。
CPU Usage Profiler モジュールは、プロファイリングデータを Timeline ビューまたは各種の階層ビューに表示します。以下のビューが選択可能です。
* # Timeline
* 階層
* Inverted Hierarchy
* Raw Hierarchy
ビューを変更するには、Profiler ウィンドウの下半分にあるドロップダウンビューセレクターを使用します。
CPU Usage Profiler モジュールでフレームが選択されている
Timeline ビューは CPU Usage Profiler モジュールのデフォルトビューです。このビューは、アプリケーションで時間のかかる部分と、それらのタイミングが互いにどのように関連しているかについて、概要を示します。すべてのスレッドのパフォーマンスデータを、それぞれのサブセクションに、同じ時間軸に沿って表示します。
Timeline ビューを使用することで、異なるスレッドのアクティビティを並列実行した場合に、これらのアクティビティが互いにどのように相関するかを把握できます。Timeline ビューには、ジョブシステムのワーカースレッドなど、アプリケーションが各種のスレッドをどれだけ使用しているかも表示されます。また、スレッドの作業がどのようにキューに入れられているか、またはアイドル状態 (Idle サンプル) や他のスレッド/ジョブの終了を待機中 (Wait for x サンプル) のスレッドがあるかどうかも示します。
Hierarchy (階層) ビューには、一度に 1 つのスレッド (デフォルトではメインスレッド) のプロファイリングデータが表示されます。Hierarchy ビューはサンプルの継続時間のみを表示しますが、Timeline (タイムライン) ビューは各サンプルが発生した時間を表示します。
Hierarchy ビューには、プロファイルしたすべてのサンプルがリストされています。これらのサンプルはプロファイラーマーカーの階層と共有コールスタックによってグループ化されます。Raw Hierarchy ビューはサンプルをグループ化しないため、サンプルを細かいレベルで調べるために適しています。
Inverted Hierarchy (反転階層) ビューは、プロファイラーマーカーによってサンプルをグループ化し、反転サンプルスタックとともに表示します。階層の最初のレベルには、各プロファイラーマーカーの項目があります。ツリーの各子項目は反転したサンプルスタックの一部を表し、そのデータは、集約された親項目のためにこのサンプルスタックを介して費やされた時間またはヒープメモリの量を示します。
Inverted Hierarchy ビューは、パフォーマンスに小規模に影響する多数のインスタンスが原因となって発生する、より大きなパフォーマンスの問題を明らかにするために役立ちます。このような問題は、Timeline ビューや非反転階層ビューでは見つけにくい場合があります。
プロファイラーマーカーは、プロファイラーがプロファイリング情報を時系列や階層別に整理して表示するために使用する、サンプルのセットを出力します。プロファイラーウィンドウに表示されるすべてのサンプルは、サンプルスタックの一部です。
サンプルスタックはメソッドのコールスタックとは異なります。Unity ではすべてのサンプルが特定のメソッドに関連付けられるわけではなく、呼び出しのすべてがサンプルとして記録されてはいないからです。Deep Profiling (詳細プロファイリング) によってすべての機能呼び出しにプロファイラーマーカーが追加されますが、ネイティブコードには追加されません。また、これらのサンプルのレコーディングには、高いオーバーヘッドがかかります。
CPU Usage Profiler モジュールを使用することで、GC.Alloc、UnsafeUtility.Malloc、および JobHandle.Complete が出力するサンプルのコールスタック全体を検査できます。Deep Profiling を有効にして高いオーバーヘッドを発生させることなく、サンプルがどこで発生したかを追跡したい場合に便利です。コールスタックを有効にする方法については、全コールスタックの有効化を参照してください。
CPU Usage Profiler (CPU 使用量プロファイラー) を使用して、メモリクリーンアップが実行された場所を調べることもできます。
コードが新しいマネージオブジェクトを作成するたびに、オブジェクトが現在のメモリーヒープに収まらず、ガベージコレクションが実行される可能性があります。ガベージコレクションによってすべてのスレッドが一時停止し、未使用メモリを探すためにマネージヒープがスキャンされます。このプロセスには時間がかかり、フレームレートを乱す場合があります。マネージガベージコレクションは、プロファイラーに GC.Collect サンプルとして表示され、一方でマネージ割り当ては GC.Alloc として表示されます。
ガベージコレクターによるアプリケーションのフレームレートへの影響を防ぐには、アプリケーションの実行中は GC.Alloc 値を 0 のままにし、ヒープサイズを小さく保つようにします。Timeline ビューでは、GC.Alloc サンプルは赤紫色で表示され、割り当てのサイズを表します。
コードのマネージ割り当てがどこで実行されたかを確認するには、GC.Alloc の全コールスタックを有効にします。マネージヒープの詳細については、マネージメモリーに関するドキュメントを参照してください。