Нативный плагин API для управления памятью
Менеджер памяти IUnityMemoryManager API позволяет использовать управление памятью и профилирование памяти Unity в собственных плагинах, написанных на C или C++.
Этот API позволяет вам:
- Доступ к менеджеру памяти Unity через распределитель памяти.
- Отслеживайте использование памяти вашего плагина через UnityПамять Profiler пакет.
Эти возможности облегчают управление и профилирование выделения памяти вашего плагина по сравнению с эквивалентными методами управления памятью C++.
Плагин API предоставляется IUnityMemoryManager интерфейс, объявленный в IUnityMemoryManager.h файл заголовка, расположенный в папка PluginAPI.
Дополнительные сведения см. в документации, представленной в виде комментариев к коду в файле заголовка.
Вы должны быть знакомы со следующими понятиями, чтобы использовать этот API эффективно:
- C++ Указатели
- Память в Unity
- Память Profiler пакет
- Настройка распределителя памяти
- Предопределенные макросы
Использование памяти в Unity
Чтобы отслеживать использование памяти вашего плагина, используйте Память Profiler пакет чтобы сделать снимок, а затем открыть снимок в Вкладка «Все памяти». Когда вы используете IUnityMemoryManager для выделения памяти, памяти Profiler отображает выделения памяти плагина под областью и именем объекта, которые вы назначили при создании каждого распределителя.
На следующем скриншоте показано окно пакета Memory Profiler, отображающее память, используемую родственным плагином с памятью, выделенной с IUnityMemoryManager API. В этом примере был вызван метод CreateAllocator, с “MyNativePlugin” в качестве параметра areaName и “MyPluginAllocator” в качестве параметра objectName. Для получения дополнительной информации, см. IUnityMemoryManager API ссылка.
Дополнительные сведения см. в Снимки.
Ограничения управления памятью
Этот API позволяет вам использовать систему управления памятью Unity при разработке собственных плагинов. Это имеет основные преимущества, описанные выше, но все еще есть ограничения. Система управления памятью Unity:
- Не управляется автоматически; вы должны выделить и разблокировать память самостоятельно.
- Не отслеживается и не очищается мусоросборщиком.
Поскольку память в нативном C++ не управляется, вам нужно отслеживать любые требования к памяти у вашего приложения. Это включает в себя выбор правильного количества памяти для выделения и убедитесь, что вы выделяете ее, когда она больше не нужна.
IUnityMemoryManager Этот API влияет на производительность, поскольку каждое выделение требует виртуального вызова. Чтобы уменьшить это влияние, выделяйте более крупные блоки памяти реже. Для мелких и частых выделений выделите этим API один крупный блок, а затем управляйте памятью внутри него собственным кодом. Не используйте этот API для частых мелких выделений.