Video Tutorials
Interface
Essentials
Advanced
Полезные советы
UnigineEditor
Interface Overview
Assets Workflow
Settings and Preferences
Working With Projects
Adjusting Node Parameters
Setting Up Materials
Setting Up Properties
Lighting
Landscape Tool
Using Editor Tools for Specific Tasks
Extending Editor Functionality
Программирование
Fundamentals
Setting Up Development Environment
Usage Examples
UnigineScript
C++
UUSL (Unified UNIGINE Shader Language)
File Formats
Rebuilding the Engine Tools
GUI
Double Precision Coordinates
API
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
Работа с контентом
Content Optimization
Materials
Art Samples
Tutorials

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

Сборщик мусора (GC) представляет собой автоматический диспетчер памяти, отвечающий за выделение и освобождение памяти для приложения. Таким образом, разработчикам, работающим с управляемым кодом, не нужно думать о задачах управления памятью и писать для этого какой-то конкретный код. Автоматическое управление памятью помогает устранить распространенные проблемы, такие как неосвобождение объекта и возникновение утечки памяти или попытка доступа к памяти уже освобожденного объекта.

Вот преимущества, которые предоставляет сборщик мусора:

  • Избавляет разработчиков от необходимости освобождать память вручную.
  • Эффективно размещает объекты в управляемой куче.
  • Восстанавливает объекты, которые больше не используются, очищает их память, оставляя память доступной для будущих распределений. Управляемые объекты автоматически получают чистый контент для начала, поэтому вам не нужно инициализировать каждое поле данных в их конструкторах.
  • Обеспечивает безопасность памяти, гарантируя, что содержимое объекта не может использоваться другим объектом.

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

Сборщик мусора UNIGINE предлагает вам следующий набор режимов (Engine.GCMode), делающий процесс управления сборкой мусора гибким:

  • DEFAULT (по умолчанию) - режим сборщика мусора C# по умолчанию. В этом случае неизбежны сильные всплески и чрезмерное потребление памяти, если вы не управляете своими объектами должным образом и не используете метод Dispose().
  • USE_MEMORY_PRESSURE - передает информацию о потреблении памяти C++ в C#. Это приводит к более частым вызовам GC, не позволяя приложению съедать слишком много памяти сразу после запуска, и удаляет сильные всплески.
  • EVERY_FRAME - сборщик мусора вызывается каждый кадр. Это приводит к снижению общей производительности, но устраняет сильные всплески.
  • WORLD_SHUTDOWN - сборщик мусора вызывается при закрытии мира. Этот режим идеален, если количество выделений памяти в вашем коде незначительно.

Вы можете установить режим сборщика мусора в методе SystemLogic::Init() или в любом месте вашего кода, и вы можете изменить его при необходимости, в зависимости от текущей ситуации. Это также безопасно делать в ваших компонентах C#.

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

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