版本:Unity 6 (6000.0)
语言:English
低级原生插件着色器编译器访问
IUnityMemoryManager API 参考

低级原生插件内存管理器 API

IUnityMemoryManager 内存管理器 API 是一个 C++ 接口,允许您在原生插件在 Unity 外部创建的一组代码,用于在 Unity 中创建功能。您可以在 Unity 中使用两种类型的插件:托管插件(使用 Visual Studio 等工具创建的托管 .NET 程序集)和原生插件(特定于平台的原生代码库)。更多信息
参见 术语表
中使用 Unity 的内存管理和内存分析。

此 API 使您能够

  • 通过内存分配器访问 Unity 的内存管理器。
  • 通过 Unity 的内存分析器一个帮助您优化游戏的窗口。它显示了在游戏的各个区域花费了多少时间。例如,它可以报告渲染、动画或游戏逻辑中花费的时间百分比。更多信息
    参见 术语表
    包跟踪插件的内存使用情况。

与等效的 C++ 内存管理方法相比,这些功能使管理和分析插件的内存分配变得更容易。

插件 API 由 IUnityMemoryManager 接口提供,该接口在 IUnityMemoryManager.h 头文件中声明。该 API 的完整参考可在此文件中找到。要查找头文件

  • 在 Windows 上,Unity 将头文件存储在 Unity 安装的 <UnityInstallPath>\Editor\Data\PluginAPI 文件夹中。
  • 在 macOS 上,右键单击 Unity 应用程序,然后选择显示包内容。头文件位于 Contents\PluginAPI 中。

您应该熟悉以下概念才能有效地使用此 API

跟踪 Unity 中的内存使用情况

要跟踪插件的内存使用情况,请使用内存分析器包 拍摄快照,然后在所有内存选项卡中打开快照。当您使用 IUnityMemoryManager 分配内存时,内存分析器会在您创建每个分配器时分配的区域和对象名称下显示插件的内存分配。

下面的屏幕截图显示了内存分析器包窗口,其中显示了使用 IUnityMemoryManager API 分配的内存的原生插件使用的内存。在此示例中,调用了 CreateAllocator 方法,其中 “MyNativePlugin” 为 areaName 参数, “MyPluginAllocator” 为 objectName 参数。有关更多信息,请参阅CreateAllocator

The Memory Profiler package window displaying the memory used by a user-defined allocator named Plugin Backend Allocator.
内存分析器包窗口显示用户定义的分配器“Plugin Backend Allocator”使用的内存。

有关更多信息,请参阅快照

内存管理限制

此 API 使您能够在开发原生插件时使用 Unity 的内存管理系统。这具有上述主要优势,但仍然存在一些限制。Unity 的内存管理系统

  • 不是自动管理的;您需要自己分配和释放内存。
  • 不会被垃圾回收器跟踪和清理。

由于原生 C++ 中的内存未被管理,因此您需要跟踪应用程序具有的任何内存需求。这包括选择要分配的正确内存量,并确保在不再需要时释放它。

IUnityMemoryManager API 会影响性能,因为每次分配都需要虚拟调用。为了最大程度地减少这种性能影响,请使用 API 不太频繁地分配更大的内存块。为了处理更小且更频繁的分配,请使用此 API 分配单个更大的块,然后编写您自己的代码来管理此块中的内存。不要将此 API 用于频繁的小型分配。

其他资源

  • 原生插件接口 - 解释此 API 继承的基本接口。
  • 原生插件在 Unity 外部创建的特定于平台的原生代码库,用于在 Unity 中使用。允许您访问否则无法用于 Unity 的功能,例如操作系统调用和第三方代码库。更多信息
    参见 术语表
    - 解释什么是原生插件。
  • 内存分配器自定义 - 解释如何自定义 Unity 的内部内存分配器。
低级原生插件着色器编译器访问
IUnityMemoryManager API 参考