IUnityMemoryManager メモリマネージャー API は、Unity のメモリ管理とメモリプロファイリングをネイティブプラグインで使用できるようにする C++ インターフェースです。
この API を使用すると、以下が行えます。
これらの機能によって、プラグインのメモリ割り当ての管理とプロファイリングが (C++ でこれと同等のメモリ管理メソッドを使用するよりも) 簡単に行えます。
プラグイン API は、IUnityMemoryManager.h ヘッダーで宣言される、IUnityMemoryManager インターフェースによって提供されます。API の完全なリファレンスは、このファイルにあります。ヘッダーファイルを見つけるには、以下を行います。
<UnityInstallPath>\Editor\Data\PluginAPI フォルダー内にこのヘッダーが保存されます。Contents\PluginAPI にあります。この API を効果的に使用するためには、以下の概念に関する理解が必要です。
プラグインのメモリ使用量を追跡するには、Memory Profiler パッケージ を使用してスナップショットを作成し、All Of Memory タブ でそのスナップショットを開きます。IUnityMemoryManager を使用してメモリを割り当てると、Memory Profiler に、プラグインのメモリ割り当てが (各アロケーターの作成時にアサインした領域とオブジェクトの名前の下に) 表示されます。
以下のスクリーンショットでは、Memory Profiler パッケージウィンドウに、IUnityMemoryManager API でメモリを割り当てられたネイティブプラグインの、メモリ使用量が表示されています。この例では、areaName パラメーターを “MyNativePlugin”、objectName パラメーターを “MyPluginAllocator” として CreateAllocator メソッドが呼び出されています。詳細については、CreateAllocator を参照してください。
詳細については、スナップショット を参照してください。
この API を使用すると、ネイティブプラグインの開発時に Unity のメモリ管理システムが使用できるようになります。これには上述のとおり大きな利点がありますが、制限がないわけではありません。Unity のメモリ管理システムには以下の特徴があります。
ネイティブ C++ のメモリは管理されないため、アプリケーションに必要なメモリを全て把握しておく必要があります。これには、割り当てるメモリの量を適切に選択することや、不要になったメモリの割り当てを確実に解除することが含まれます。
IUnityMemoryManager API を使用する場合、割り当てのたびに仮想呼び出しが必要になるため、パフォーマンスへの影響があります。このパフォーマンスへの影響を最小限に抑えるには、この API を使用して、大きなメモリブロックを低い頻度で割り当てます。小さい頻繁な割り当てを処理するには、この API を使用して単一の大きなブロックを割り当てた上で、独自のコードを記述してこのブロック内のメモリを管理します。小さい頻繁な割り当てには、この API を使用しないでください。