概要
開発が大規模になると使用メモリが膨大になり、
アセットのロード時間やゲームの起動に影響を及ぼします。
この記事では簡単にできるメモリ使用量のチェック方法を記載致します。
調査方法について
メモリの使用量をチェックする方法です。
ここでは下記のコンソールコマンドを使った例を紹介します。
コンソールコマンド
memreport -full
で現在使用しているメモリのダンプをとることができます。
Saved/Profiling/MemReports/以下に保存されます。
拡張子がmemreportなのですが、中身はテキストデータなのでそのまま見ることが可能です。
見やすくするために専用のビューワーなど作成しておくと作業しやすいです。
例:SkeletalMesh のメモリ使用量を調べたいとき
memreportをテキストエディタ等で開いて、
Obj List: class=SkeletalMesh -alphasort
Objects:
:
:
と書かれている箇所を参照してみてください。
ここに列挙されているオブジェクトはメモリに乗っているメッシュの情報です。
不要なメッシュや、破棄できていないメッシュがあれば、無駄なメモリを使用しているということになります。
注意!
エディタでは使用メモリが開放されないので、
そのまま別のレベルでコマンドを使用すると、
前のレベルのメモリ情報も出力されてしまいます。
エディタの再起動もしくは、開放する手順を準備する必要があります。
対策するには
メモリ使用量を減らすには(不要なオブジェクトが見つかったときは)
メモリにのってしまっている原因を特定するのが第一歩です。
該当のアセットをエディタ上で探し、
リファレンスビューワーを使用してみてください。
多くの原因としては、
- 該当のアセットが意図せずリファレンスされている
- 別の箇所でも使いまわされている
- 移動/削除したときのリダイレクタの修正漏れ
- テスト用で置きっぱなしだった
といったケースが多いです。
リファレンスを外して不要なロードを行わなくしましょう。
ビューワー上でアセットの左側のノードが繋がっているものは参照(ハードリファレンス)されているものです。
(参照されている理由はBPの変数にされていたりなど、様々です)
おまけ
よく使うデバッグコマンド
stat XXX
コンソールコマンドで入力できる、stat XXX系はとても便利です。
エディタ上の Viewport Options から有効化出来ます。
例えば stat Memory はスクリーン上に使用メモリを表示することができます。
また、stat levels では、レベルのロード状況やロード時間を調べることが出来ます。
ここでは詳細は割愛しますが、参考のリンクを記載致します。