This page has been translated automatically.
Видеоуроки
Интерфейс
Основы
Продвинутый уровень
Подсказки и советы
Основы
Программирование на C#
Рендеринг
Профессиональный уровень (SIM)
Принципы работы
Свойства (properties)
Компонентная Система
Рендер
Режимы вывода изображения
Физика
Браузер SDK 2
Лицензирование и типы лицензий
Дополнения (Add-Ons)
Демонстрационные проекты
API Samples
Редактор UnigineEditor
Обзор интерфейса
Работа с ассетами
Контроль версий
Настройки и предпочтения
Работа с проектами
Настройка параметров ноды
Setting Up Materials
Настройка свойств
Освещение
Sandworm
Использование инструментов редактора для конкретных задач
Расширение функционала редактора
Встроенные объекты
Ноды (Nodes)
Объекты (Objects)
Эффекты
Декали
Источники света
Geodetics
World-ноды
Звуковые объекты
Объекты поиска пути
Player-ноды
Программирование
Основы
Настройка среды разработки
Примеры использования
C++
UnigineScript
Унифицированный язык шейдеров UUSL (Unified UNIGINE Shader Language)
Плагины
Форматы файлов
Материалы и шейдеры
Rebuilding the Engine Tools
Интерфейс пользователя (GUI)
Двойная точность координат
API
Animations-Related Classes
Containers
Common Functionality
Controls-Related Classes
Engine-Related Classes
Filesystem Functionality
GUI-Related Classes
Math Functionality
Node-Related Classes
Objects-Related Classes
Networking Functionality
Pathfinding-Related Classes
Physics-Related Classes
Plugins-Related Classes
IG Plugin
CIGIConnector Plugin
Rendering-Related Classes
VR-Related Classes
Работа с контентом
Оптимизация контента
Материалы
Визуальный редактор материалов
Material Nodes Library
Miscellaneous
Input
Math
Matrix
Textures
Art Samples
Учебные материалы
Внимание! Эта версия документация УСТАРЕЛА, поскольку относится к более ранней версии SDK! Пожалуйста, переключитесь на самую актуальную документацию для последней версии SDK.
Внимание! Эта версия документации описывает устаревшую версию SDK, которая больше не поддерживается! Пожалуйста, обновитесь до последней версии SDK.

Сборщик мусора

The Garbage Collector (GC) represents an automatic memory manager responsible for allocation and release of memory for an application. So, developers working with managed code don't have to think about memory management tasks, and write any specific code for this purpose. Automatic memory management helps eliminate common problems, such as forgetting to free an object and causing a memory leak or attempting to access memory for an object that's already been freed. Сборщик мусора (GC) представляет собой автоматический диспетчер памяти, отвечающий за выделение и освобождение памяти для приложения. Таким образом, разработчикам, работающим с управляемым кодом, не нужно думать о задачах управления памятью и писать для этого какой-то конкретный код. Автоматическое управление памятью помогает устранить распространенные проблемы, такие как неосвобождение объекта и возникновение утечки памяти или попытка доступа к памяти уже освобожденного объекта.

Here are the benefits the Garbage Collector provides: Вот преимущества, которые предоставляет сборщик мусора:

  • Frees developers from having to release memory manually. Избавляет разработчиков от необходимости освобождать память вручную.
  • Efficiently allocates objects on the managed heap. Эффективно размещает объекты в управляемой куче.
  • Reclaims objects that are no longer used, clears their memory, keeping the memory available for future allocations. Managed objects automatically get clean content to start with, so you don't have to initialize each and every data field in their constructors. Восстанавливает объекты, которые больше не используются, очищает их память, оставляя память доступной для будущих распределений. Управляемые объекты автоматически получают чистый контент для начала, поэтому вам не нужно инициализировать каждое поле данных в их конструкторах.
  • Provides memory safety making sure that the content of an object cannot be used by another object. Обеспечивает безопасность памяти, гарантируя, что содержимое объекта не может использоваться другим объектом.

Garbage Collection Modes
Режимы сборки мусора#

UNIGINE's Garbage Collector offers you the following set of modes (Engine.GCMode) making the process of garbage collection management flexible: Сборщик мусора UNIGINE предлагает вам следующий набор режимов (Engine.GCMode), делающий процесс управления сборкой мусора гибким:

  • DEFAULT (default) - default C# garbage collector mode. In this case heavy spikes and excessive memory consumption are imminent if you don’t manage your objects properly and do not use the Dispose() method. DEFAULT (по умолчанию) - режим сборщика мусора C# по умолчанию. В этом случае неизбежны сильные всплески и чрезмерное потребление памяти, если вы не управляете своими объектами должным образом и не используете метод Dispose().
  • USE_MEMORY_PRESSURE - passes the information about C++ memory consumption to C#. This results in more frequent GC calls preventing the application from eating too much memory right after startup and removing heavy spikes. USE_MEMORY_PRESSURE - передает информацию о потреблении памяти C++ в C#. Это приводит к более частым вызовам GC, не позволяя приложению съедать слишком много памяти сразу после запуска, и удаляет сильные всплески.
  • EVERY_FRAME - the garbage collector is called every frame. This results in overall performance reduction, but removes heavy spikes. EVERY_FRAME - сборщик мусора вызывается каждый кадр. Это приводит к снижению общей производительности, но устраняет сильные всплески.
  • WORLD_SHUTDOWN - the garbage collector is called on closing the world. This mode is ideal if the number of memory allocations is your code is insignificant. WORLD_SHUTDOWN - сборщик мусора вызывается при закрытии мира. Этот режим идеален, если количество выделений памяти в вашем коде незначительно.

You can set Garbage Collector's mode in the SystemLogic::Init() method or anywhere in your code, and you can change it when necessary, depending on the current situation. It is also safe to do it in your C# components. Вы можете установить режим сборщика мусора в методе SystemLogic::Init() или в любом месте вашего кода, и вы можете изменить его при необходимости, в зависимости от текущей ситуации. Это также безопасно делать в ваших компонентах C#.

Исходный код (C#)
class UnigineApp
{
  class AppSystemLogic : SystemLogic
  {
    // ...

    public override bool Init()
    {
      Engine.GCMode = Engine.GCMODE.EVERY_FRAME;
      // ...
      return true;
    }
    // ...
}
Последнее обновление: 16.08.2024
Build: ()