ドキュメント

Unity Engine

Unity Engine

CPU Usage Profiler モジュールの概要

Investigate the CPU performance of your application and identify performance bottlenecks.
読み終わるまでの所要時間 11 分最終更新 1ヶ月前

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

Views(視聴数)

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

  • 階層
  • Inverted Hierarchy
  • Raw Hierarchy
ビューを変更するには、Profiler ウィンドウの下半分にあるドロップダウンビューセレクターを使用します。
CPU Usage Profiler モジュールでフレームが選択されている

Profiler ウィンドウ。Timeline ビューは詳細ペインで選択します。

Timeline ビュー

Timeline ビューは CPU Usage Profiler モジュールのデフォルトビューです。このビューは、アプリケーションで時間のかかる部分と、それらのタイミングが互いにどのように関連しているかについて、概要を示します。すべてのスレッドのパフォーマンスデータを、それぞれのサブセクションに、同じ時間軸に沿って表示します。
Timeline ビューを使用することで、異なるスレッドのアクティビティを並列実行した場合に、これらのアクティビティが互いにどのように相関するかを把握できます。Timeline ビューには、ジョブシステムのワーカースレッドなど、アプリケーションが各種のスレッドをどれだけ使用しているかも表示されます。また、スレッドの作業がどのようにキューに入れられているか、またはアイドル状態 (Idle サンプル) や他のスレッド/ジョブの終了を待機中 (Wait for x サンプル) のスレッドがあるかどうかも示します。

Hierarchy ビュー

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 の全コールスタックを有効にします。マネージヒープの詳細については、マネージメモリーに関するドキュメントを参照してください。

追加リソース