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
应用程序接口
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

垃圾收集器

垃圾收集器(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;
    }
    // ...
}
最新更新: 2020-10-10