Version: 2019.4
言語: 日本語
GPU Usage プロファイラーモジュール
Physics プロファイラーモジュール

Memory プロファイラーモジュール

Unity でアプリケーションのメモリ使用量を分析する方法は 2 つあります。

  • Memory (メモリ) プロファイラーモジュール: Profiler ウィンドウの ビルトインモジュールで、アプリケーションのメモリを何に使用しているかの基本的な情報を提供します。
  • Memory プロファイラーパッケージ: プロジェクトに追加できる別のパッケージです。これにより、Unity エディターに Memory プロファイラーウィンドウが追加され、アプリケーションのメモリ使用をさらに詳細に分析することができます。スナップショットを保存して比較することで、より簡単にメモリリークを発見したり、メモリレイアウトを確認してメモリの断片化の問題を発見したりできます。

このページではビルトインの Memory プロファイラーモジュール について説明します。Memory プロファイラーパッケージの詳細は、Memory プロファイラーのドキュメント を参照してください。

Memory プロファイラーモジュールは、アプリケーションに割り当てられたすべてのメモリを表すカウンターを視覚化します。メモリモジュールを使用して、ロードされたオブジェクトの数や、カテゴリごとの合計メモリに占める使用量などの情報を確認できます。プロファイラーフレームごとの GC 割り当て数も確認できます。

エディターでアプリケーションをプロファイルすると、Memory モジュールの情報はエディターのメモリ使用を示します。これらの数値は一般的にリリースプラットフォームで実行する場合よりも大きくなります。なぜなら、Unity エディターを実行するとメモリを消費する特定のオブジェクトを使用し、エディターウィンドウ自体が余分なメモリを使用するためです。さらに、プロファイラーはプロファイラーが使用するメモリを表示します。なぜなら、Unity は再生モードのプレイヤーが使用するメモリからそれを明確に分離できないからです。

アプリケーションのより正確な数値とメモリ使用を確認するには、Attach to Player メニューを使用して、プロファイラーを実行中のプレイヤーに接続します。これにより、 ターゲットデバイスでの実際のメモリ使用を確認できます。

チャートのカテゴリ

Memory モジュールは、6 つのチャートに分かれており、アプリケーションがメモリをどこで使用するかに関する詳細情報を表示します。チャートのカテゴリの順序を変更できます。これを行うには、チャートの凡例にドラッグアンドドロップします。カテゴリの色の付いた凡例をクリックして、表示を切り替えることもできます。

カテゴリ 説明 
Total Allocated アプリケーションが使用する合計メモリ
Texture Memory アプリケーションの テクスチャ が使用するメモリ量
Mesh Memory アプリケーションの メッシュ が使用するメモリ量
Material Count アプリケーションの マテリアル のインスタンス数
Object Count アプリケーションのネイティブのオブジェクトのインスタンス数
Total GC Allocated GC ヒープによって使用されるメモリ量
GC Allocated GC ヒープのフレームごとに割り当てられたメモリ量

モジュールの詳細ペイン

モジュールの詳細ペインには、Profiler ウィンドウの下部にある SimpleDetail の 2 つの表示があります。表示を変更するには、モジュール詳細ペインの左上のドロップダウンから表示を選択します。

Simple ビュー

Simple ビューは、Unity 全体でメモリがどのように使用されているかの概要をフレームごとにリアルタイムで表示します。

Unity は OS が頻繁にメモリを要求しずぎることを防ぐため、アロケーションのためのメモリプールを確保します。確保したメモリは Reserved (予約済み) として、使用されたメモリとともに表示されます。

シンプルなメモリモジュールビュー
シンプルなメモリモジュールビュー

このエリアには以下が含まれています。

  • Total: 以下のすべてのエリアの累積値
  • Unity: ネイティブの Unity コードのメモリ割り当て量。ネイティブのメモリ管理システムによって追跡され、そのタイプ、ソース、プラットフォーム固有の割り当てパターンによってメモリプールに割り当てられます。
  • Mono: 全体のヒープサイズとマネージドコードが使用するヒープサイズ。このメモリはガベージコレクションされます。
  • GfxDriver: ドライバーがテクスチャ、レンダーターゲット、シェーダー、メッシュデータに使用している推定メモリ量
  • Audio: オーディオシステムの推定メモリ使用量
  • Video: ビデオシステムの推定メモリ使用量
  • Profiler: プロファイラーが使用する総メモリ

Memory プロファイラーはシステムのすべてのメモリ使用を追跡するわけではないため、プロファイラーの値は、オペレーティングシステムのタスクマネージャーに表示される値とは異なります。これには、一部のドライバーとプラグインが使用するメモリと、実行可能コードに使用されるメモリが含まれます。オペレーティングシステムからアプリケーションの総メモリサイズを取得することが可能なプラットフォームでは、Total System Memory Usage は 0 を超え、タスクマネージャーでも同じサイズです。

プロファイラーは、最も一般的なアセットとゲームオブジェクトタイプのメモリ統計も列挙します。これらの統計には、カウント (スラッシュの前) と使用メモリが含まれます。このリストの Total Object Count には、アプリケーションが作成したネイティブのゲームオブジェクトの総数が表示されます。この数が時間の経過とともに増加する場合、アプリケーションはゲームオブジェクトを作成しており、まったく破棄していないことを示します。

Detailed ビュー

Detailed (詳細) ビューを使用して、アプリケーションの現在の状態のスナップショットを取得できます。Take Sample ボタンをクリックして、現在のターゲットの詳細なメモリ使用をキャプチャ ます。プロファイラーがこのデータを取得するにはかなりの時間がかかるため、Detailed ビューではリアルタイムの詳細情報は表示されません。プロファイラーがサンプルを取得した後に、Profiler ウィンドウにツリービューが表示され、そこでアプリケーションのメモリ使用を詳細に確認できます。

メモリモジュールの詳細ビュー
メモリモジュールの詳細ビュー

モジュールの詳細ペインの上部にある Gather object references 設定を有効にして、スナップショットの時点でオブジェクトを参照しているものに関する情報を収集できます。この情報は、ウィンドウの右側のペインに表示されます。

メモリを使用するオブジェクトは、ツリービューで以下のカテゴリに分類されます。

  • Other: アセット、ゲームオブジェクト、コンポーネントのいずれでもないオブジェクト。Unity が異なるシステムで使用するメモリなどの情報はこちらを参照してください。
  • Not Saved: DontSave とマークされたオブジェクト
  • Builtin Resources: Unity エディターリソース、または Unity のデフォルトリソース。例えば、Graphics 設定の Always Included Shaders リストに加えたシェーダーなど。
  • Assets: ユーザーやネイティブコードから参照されるアセット
  • Scene Memory: ゲームオブジェクトとアタッチされたコンポーネント

Asset または Scene Memory リストでオブジェクトをクリックすると、Project またはシーンビューでハイライトされます。

ノート: Other カテゴリでは、System.ExecutableAndDlls で報告されるメモリは読み取り専用メモリです。オペレーティングシステムは必要に応じてこれらのページを破棄し、後でファイルシステムから再ロードする場合があります。これにより、メモリ使用量が少なくなり、通常は、オペレーティングシステムがメモリを使いすぎた場合にアプリケーションを閉じるかどうかの決定に、直接影響しません。これらのページの一部は、同じフレームワークを使用している他のアプリケーションと共有される場合もあります。

GPU Usage プロファイラーモジュール
Physics プロファイラーモジュール