UnityのMemory Profilerの基本的な使い方をまとめました。
- Memory Profiler?
- メモリをキャプチャする
- Tree Mapで型ごとにメモリに占める割合を可視化
- Memory Mapでメモリのレイアウトを可視化
- 二つのキャプチャを比較するDiff
- Diffで新規生成された大きいオブジェクトを特定する
- 参考
Unity2018.4.0
Memory Profiler 0.1.0-preview
Memory Profiler?
Memory ProfilerはUnityの公式ツールで、メモリの情報を視覚的に表示できます。
インストールはPackage Managerから行えます。
この記事の執筆時点ではまだPreview版です。
モバイル端末でもDevelopment Buildであれば使えるようですが、
このツール自体メモリを食うので、メモリがギリギリの状況で使用するとツールのせいで落ちたりするかもしれません。
またエディタで使う場合には、ゲーム用のリソースの他にエディタ用のリソースなども表示されてしまうので注意が必要です。
メモリをキャプチャする
Memory Profilerでメモリの状況を見るには、まずメモリをキャプチャする必要があります。
Window > Analysis > Memory Profilerからウィンドウを開きます。
ウィンドウを開いたらゲームを再生し、ツールバーのCapture Playerボタンを押します。
左側のビューに項目が追加されればキャプチャ成功です。
歯車マークからキャプチャの名前を変更したり、削除したりできます。
Tree Mapで型ごとにメモリに占める割合を可視化
キャプチャの右のOpenボタンをクリックすると、Tree Mapが開きます。
これはそれぞれの型のオブジェクトがメモリに占める割合を可視化したものです。
型名をクリックすると詳細が見れます。
例えばShaderをクリックするとこんな感じになります。
Memory Mapでメモリのレイアウトを可視化
ツールバーからTree MapをMemory Mapに切り替えると、
メモリのレイアウトを可視化することができます。
Memory Mapではツールバーの右上で一行当たりがメモリ上の何MBを表すかを変更したりできます。
二つのキャプチャを比較するDiff
あるキャプチャをOpenしたままもう一つのキャプチャをOpenすると、
左側のウィンドウ下部のDiffボタンがアクティブになります。
Diffボタンを押すと二つのキャプチャのオブジェクトを比較するビューになります。
DiffカラムがSameのものは変わっていないもの、Deletedは削除されたもの、Newは新規生成されたものです。
また、ツールバーからMemory Map Diffモードを選択すると、メモリレイアウト上の差分を見ることができます。
Diffで新規生成された大きいオブジェクトを特定する
Diff表示中にDiffカラムをGroupモードに切り替えることができます。
これを行うと、Diffの種類ごとにグループ化が行われるので見やすくなります。
今回は生成されたオブジェクトが638個、削除されたオブジェクトが208個あるようです。
生成されたオブジェクトの中にはUnityが内部的に生成しているものも多数あります。
今回は大きめのテクスチャを10個ロードしたので、この中からこれを特定してみます。
まずNewグループを開いて、ウィンドウの横幅を広げます。
次にNative Sizeを降順に設定します。
するとロードした10個のテクスチャが上のほうに表示されました。
このようなフローでDiffを分析していくと、メモリリークの特定などに役立ちそうです。