IUnityMemoryManager 内存管理器 API 是一个 C++ 接口,能在原生插件中使用 Unity 的内存管理和内存性能分析。
借助这个 API,可实现以下操作:
相较于常规的 C++ 内存管理方法,这些功能极大地简化了插件内存分配的管理与分析过程。
插件 API 由在 IUnityMemoryManager.h 标头中声明的 IUnityMemoryManager 接口提供。此文件中提供了 API 的完整参考。要查找头文件:
<UnityInstallPath>\Editor\Data\PluginAPI 文件夹中。Contents\PluginAPI 中。您应该熟悉以下概念才能有效使用此 API:
要跟踪插件的内存使用情况,请使用内存性能分析器包 (Memory Profiler package) 拍摄快照,然后在全部内存 (All Of Memory) 选项卡中打开快照。使用 IUnityMemoryManager 分配内存时,内存性能分析器会在创建每个分配器时指定的区域和对象名称下,显示插件的内存分配情况。
以下截屏展示了内存性能分析器包 (Memory Profiler package) 窗口,其中显示了原生插件使用的内存以及使用 IUnityMemoryManager API 分配的内存。在此示例中,调用了 CreateAllocator 方法,其中“MyNativePlugin”作为 areaName 参数,“MyPluginAllocator”作为 objectName 参数。有关更多信息,请参阅 CreateAllocator。
有关更多信息,请参阅快照。
开发原生插件时,借助这个 API,可运用 Unity 的内存管理系统。虽然这有如上所述的主要优点,但也存在一些限制。Unity 的内存管理系统:
由于原生 C++ 中的内存没有自动管理支持,因此您需要密切关注应用程序的内存需求。这包括选择正确的内存分配量,并确保在不再需要时取消分配。
IUnityMemoryManager API 会对性能产生影响,原因是每次内存分配都要执行一次虚拟调用。为了最大限度降低此性能影响,请使用 API 来减少分配更大内存块的频率。对于较零碎且频繁的内存分配,可先用此 API 分配一个大内存块,然后编写自己的代码来管理这个内存块内的内存。不要使用此 API 进行频繁的小内存分配操作。