资源在0引用时不会立即释放

在KEngine的资源模块中,需要手工的对资源进行释放,减少引用。 但是当引用为0后,会有一个延迟时间,才进行真正的资源释放。

这是因为,实际项目开发中,清理掉所有的现有资源,可能同时重新初始化这样的一个资源,即引用为0的同一帧内,可能引用立刻又会改变,再一次触发加载资源。

因此,引用为0,释放资源,显然不符合项目真实情况。

事实上,Unity的GameObject.Destroy也有类似的机制,Destroy并非立刻触发的。

间隔时间

目前默认在编辑器模式下,间隔时间是1秒后进行资源清理;非编辑器模式,调试模式时5秒,正式环境时10秒。


// KAbstractResourceLoader.cs文件代码

/// <summary>
/// 间隔多少秒做一次GC(在AutoNew时)
/// </summary>
public static float GcIntervalTime
{
    get
    {
        if (Application.platform == RuntimePlatform.WindowsEditor ||
            Application.platform == RuntimePlatform.OSXEditor)
            return 1f;

        return Debug.isDebugBuild ? 5f : 10f;
    }
}

这不是真正的垃圾回收机制

严格意义来说,以上说不上是真正的类似其它计算机语言的“垃圾回收机制”。因为具体资源的引用计数,还是需要手动进行管理的。所谓的垃圾回收,只是指清理环节,被做成单独步骤。