Memory Profiler 1.0.0について知っておくべきすべてのこと

新しいメモリ・プロファイラ-バージョン1.0.0-は、プロファイリング・スイートに改良を加え、メモリ使用状況をより完全に把握できるようにし、パフォーマンスの最適化やメモリ問題の検出をより簡単かつ迅速に行えるようにします。
私たちプロファイラ・チームは、2022年9月現在、メモリ・プロファイラ・パッケージがExperimentalからVerifiedに移行し、Unity 2022.2 Tech Streamを使用して誰でもアクセスできるようになったことを発表できてとても嬉しく思っています。
メモリを最適化することは、メモリ不足によるクラッシュを防ぐために、限られた機能しか持たないデバイス上で実行されるアプリケーションにとって極めて重要である。さらに、複数のデバイスでの出荷を計画している場合、各プラットフォームから最高のものを引き出すために、メモリのフットプリントを微調整する必要があるかもしれない。
Memory Profilerは、ゲームのスナップショットを取得し、特定の時点でのメモリ使用状況を確認できるツールで、このような課題を解決するのに役立ちます。
ゲームの "スナップショット "を取ることで、何がメモリの大半を占めているかを確認したり、アプリケーションがクラッシュする原因となる問題を特定することができます。
注意:Memory Profilerの完全な機能とメモリ・トラッキングは2022.2以降でのみ利用可能ですが、空の2022+プロジェクトでMemory Profilerを開き、古いスナップショットをインポートすることで、新しいユーザー・インターフェース(UI)を活用して古いキャプチャを検査することができます。
Memory Profilerはもともと数年前に実験的なパッケージとしてリリースされたが、今回のリリースではUIとユーザー・エクスペリエンス(UX)を大幅に見直し、より高速で使いやすくなった。
オリジナルの実験的なパッケージは、初期の採用者たちによって使用され、多くの場合、メモリの問題を特定するのに役立った。しかし、最初の頃は扱いにくく、時間がかかり、専門的な知識が必要だった。
パッケージの新バージョンに着手したとき、私たちは次のような意図を持っていた:
- 最も一般的で重要なワークフローを簡素化することで、問題を迅速に特定し、修正できるようになります。
- より完全で信頼性の高い情報を提供し、デバイス間のメモリ使用量の比較を容易にする(プラットフォーム固有のプロファイラも使用)。
- メモリに関する深い知識を持たないユーザーでもアプリケーションを効果的に最適化できるよう、より分かりやすい方法で情報を表示します。
これを達成するために、私たちは実験的パッケージの早期採用者と緊密に協力し、彼らのニーズとペインポイントを理解し、最高のUXを提供できるようにデザインを何度も反復してきました。
彼らの意見のおかげで、私たちのチームはツールを大幅に合理化、簡素化することができ、専門用語を減らし、ツール内でオブジェクト、詳細、依存関係を直接検査しやすくすることができました。
Memory Profilerは、新しく改良されたUIを示す3つの主要セクションで構成されている:
- スナップショット・リスト
- メインセクションは、3つのワークフロービュー(サマリー、ユニティオブジェクト、全メモリ)に分かれています。
- セレクション詳細
スナップショットリストは、ゲーム内で撮影したスナップショットや、メモリ使用量、撮影日などの高度な情報をキャプチャして確認できるエリアです。ここでは、ツールバーの "Capture "ボタン、またはスナップショットがない場合はメインセクションのスナップショットボタンでスナップショットをキャプチャできます。
また、スナップショット間でメモリ使用量が変化しているかどうかも確認でき、プロジェクトのパフォーマンスが向上しているかどうかも把握できる。
最後に、スナップショットリストを使って、単一のスナップショットを見るか、比較したスナップショットを見るかを選択することもできます(この詳細については後述します)。

これはMemory Profilerの核となる部分で、3つのワークフロー・ビューに分かれている:要約、ユニティ・オブジェクト、メモリーのすべて。これらの各ビューは、メインセクションの上部にあるタブからアクセスできる。
サマリービューは、スナップショットをロードまたはキャプチャするときに開くデフォルトビューです。どれだけのメモリを使用しているか、どれだけのメモリがデバイス上に「常駐」しているか、どれだけのメモリがコミットされているが現在デバイス上にないかの情報を提供する。また、どこから調査を始めるかを簡単に選択できるように、カテゴリー間でメモリーがどのように配分されているかについての情報も提供する。
最後に、Summaryビューは、"Top Unity Objects in Memory "や "Managed memory breakdown "のような、より詳細な分析への入り口を提供する。

Unity Objectsビューは、おそらくあなたが最も時間を費やす場所です。これは、テクスチャ、シェーダー、フォントなど、メモリにロードされた主な種類のオブジェクトをすべて一覧表示する。通常はここで、大きすぎるオブジェクト、間違ってロードされたためにそこにある必要のないオブジェクト、ぶら下がった参照によってメモリに保持されているオブジェクトを特定することができる。

All of Memoryビューでは、すべてのメモリをネイティブ、マネージド、グラフィックス、実行可能ファイルなどのカテゴリー別に表示することができます。メモリ・プロファイラがキャプチャしたデータを見たり、より具体的な側面からプロジェクトのメモリを構成しているものを調査することができます。

セレクションの詳細」では、「メイン」セクションで選択された項目に関する詳細情報が提供され、さまざまなカテゴリーのメモリーの説明や、選択されたオブジェクトの潜在的な参照先や詳細が表示される。
このセクションでは、あなたが見ているものを理解するのに役立つより多くの情報を提供し、それがメモリ内にある理由を簡単に判断できるようにします。さらに、エディターでプロジェクトを開いている場合、オブジェクトを "ping "したり、シーンやプロジェクトウィンドウで直接アセットを検査することができます。

上記の各ビューは、単一のスナップショットの検査やスナップショットの比較に使用できます。
スナップショットを比較したい場合は、スナップショットリストで "比較 "を選択し、リストから2番目のスナップショットを選択します。スナップショットリストの比較タブにいると、すべてのビューが自動的に比較モードになります。
Compareモードでは、Summaryビューに2つのキャプチャのメモリの内訳が並んで表示されるので、スナップショット("A "と "B "という名前になります)間のメモリ使用量の主な違いを見ることができます。

Unity ObjectsとAll of Memoryビューでは、新しい専用UIがあり、異なるメモリカテゴリのサイズや含まれるオブジェクトの量がどのように変化したかを確認できます。
上の表でカテゴリーを選択すると、下の表でスナップショットAとBの個人差を調べることができる。

単一のスナップショットの検査に戻りたい場合は、スナップショットリストで "Single" を再度選択できます。2つ目のスナップショットは潜在的にロードされたままなので、必要に応じて2つのスナップショットを素早く切り替えることができる。
今後数ヶ月の間に、メモリを効果的に最適化する方法について、さらなるリソースや情報を提供したいと考えています。メモリの一般的な問題を特定する方法や、Unityでメモリがどのように動作するのかを深く掘り下げたブログ記事もありますので、お楽しみに。
アプリケーション・パフォーマンスを最適化する方法に関する一般的なリソースについては、以下を参照されたい:
このメモリ・プロファイラの再設計は、このパッケージの実験的バージョンを早期に採用した多くの人々からの意見を統合したものです。このバージョンは、このツールの信頼性と使いやすさの両面で大きな改善をもたらしたが、我々の仕事はまだ終わっていない。
私たちは現在、フラグメンテーションの減少に関連するワークフローをよりよく理解することにも取り組んでいます。同時に、まだ未解決で改善が必要なユーザビリティやUXの問題についてもフィードバックを集めている。
フィードバックやご提案がありましたら、ロードマップのページでご意見をお聞かせください。進行中の既存機能に投票したり、新しい機能を提案したりすることができます。フォーラムで質問することもできる。
我々は両チャンネルを常に監視しており、Unityのパフォーマンスとツールをさらに向上させるために協力することを楽しみにしている。
Memory Profiler 1.0.0パッケージのインストールまたは詳細については、こちらをご覧ください。
