Unity でアプリケーションのメモリ使用量を分析する方法は 2 つあります。
このページではビルトインの 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 ウィンドウの下部にある Simple と Detail の 2 つの表示があります。表示を変更するには、モジュール詳細ペインの左上のドロップダウンから表示を選択します。
Simple ビューは、Unity 全体でメモリがどのように使用されているかの概要をフレームごとにリアルタイムで表示します。
Unity は OS が頻繁にメモリを要求しずぎることを防ぐため、アロケーションのためのメモリプールを確保します。確保したメモリは Reserved (予約済み) として、使用されたメモリとともに表示されます。
このエリアには以下が含まれています。
Memory プロファイラーはシステムのすべてのメモリ使用を追跡するわけではないため、プロファイラーの値は、オペレーティングシステムのタスクマネージャーに表示される値とは異なります。これには、一部のドライバーとプラグインが使用するメモリと、実行可能コードに使用されるメモリが含まれます。オペレーティングシステムからアプリケーションの総メモリサイズを取得することが可能なプラットフォームでは、Total System Memory Usage は 0 を超え、タスクマネージャーでも同じサイズです。
プロファイラーは、最も一般的なアセットとゲームオブジェクトタイプのメモリ統計も列挙します。これらの統計には、カウント (スラッシュの前) と使用メモリが含まれます。このリストの Total Object Count には、アプリケーションが作成したネイティブのゲームオブジェクトの総数が表示されます。この数が時間の経過とともに増加する場合、アプリケーションはゲームオブジェクトを作成しており、まったく破棄していないことを示します。
Detailed (詳細) ビューを使用して、アプリケーションの現在の状態のスナップショットを取得できます。Take Sample ボタンをクリックして、現在のターゲットの詳細なメモリ使用をキャプチャ ます。プロファイラーがこのデータを取得するにはかなりの時間がかかるため、Detailed ビューではリアルタイムの詳細情報は表示されません。プロファイラーがサンプルを取得した後に、Profiler ウィンドウにツリービューが表示され、そこでアプリケーションのメモリ使用を詳細に確認できます。
モジュールの詳細ペインの上部にある Gather object references 設定を有効にして、スナップショットの時点でオブジェクトを参照しているものに関する情報を収集できます。この情報は、ウィンドウの右側のペインに表示されます。
メモリを使用するオブジェクトは、ツリービューで以下のカテゴリに分類されます。
Asset または Scene Memory リストでオブジェクトをクリックすると、Project またはシーンビューでハイライトされます。
ノート: Other カテゴリでは、System.ExecutableAndDlls で報告されるメモリは読み取り専用メモリです。オペレーティングシステムは必要に応じてこれらのページを破棄し、後でファイルシステムから再ロードする場合があります。これにより、メモリ使用量が少なくなり、通常は、オペレーティングシステムがメモリを使いすぎた場合にアプリケーションを閉じるかどうかの決定に、直接影響しません。これらのページの一部は、同じフレームワークを使用している他のアプリケーションと共有される場合もあります。