【发布时间】:2017-02-23 17:30:31
【问题描述】:
很抱歉在这里发布,但我很绝望。
我们似乎有一堆内存在加载新场景时没有被释放。当前加载过程从 1 级开始,使用单例加载屏幕加载到空场景中然后调用 System.GC.Collect();和 Resources.UnloadUnusedAssets(); (以防万一)然后加载下一个级别。但是关卡只会增加内存大小,即使重新加载现有场景,内存也只会增加。
以下是所发生情况的简要概述:
- 加载到 HUB 区域开始大约为 590,000K(根据任务管理器内存使用情况)。这似乎没问题,因为它是一个 3D 步行区域
- 在转换到空场景后(通过上述方法),程序仍保持在 405,000K
- 启动后第一个实际级别内存为 840,000K
- 再次加载回空白场景后,内存为 750,000K
- 在开始新的关卡(2 级)后,它会跳到 1,195,000K
- 如上加载回空场景后,内存为 1,010,000K
- 然后返回到 HUB 世界的 stat(通过上面的加载转换)内存为 1,227,000K
我不认为这是统一资源泄漏,因为我已经清理了程序网格/材质,并且在空加载屏幕中我查看了存在的 UnityObjects,它只有这个(在上述过程之后) :
此时的内存快照如下所示:
我不知道是它们的问题还是编辑器的问题,但有没有办法追踪创建渲染纹理的原因?
我们发现的一件事是加载到 Boss 关卡然后返回 HUB 区域实际上会减少内存(从 Boss -> HUB 区域后大约 800MB)。但我不确定为什么会触发内存被清除。
目前在 Unity 5.5.0f3 上
如果有人对为什么会发生这种情况有任何想法或可以提供帮助,我们将不胜感激。
谢谢
【问题讨论】:
-
任务管理器内存显示可能有点误导。与任何具有托管内存运行时的应用程序一样,Unity 可能已经在内部“释放”了内存,而尚未将其返回给操作系统。通过使用能意识到这一点的内存分析器,您可能会获得更一致的结果,例如profiler built into Unity。
-
您的内存问题解决了吗?我也有类似的问题