很抱歉在这里发帖,但我绝望了。
我们似乎有很多内存在加载新场景时没有被释放。当前加载过程以1级开始,使用单例加载屏幕加载到空场景中然后调用System.GC.Collect();和Resources.UnloadUnusedAssets(); (以防万一)然后加载下一级。但是级别只会使内存大小增加,即使在重新加载现有场景时,内存也会增加。
以下是对所发生情况的简要概述:
我不认为这是一个统一的资产泄漏,因为我已经完成清理程序网格/材料,并且在空的加载屏幕中我查找了UnityObjects存在的内容,它只有这个(之后)上述过程):
此时的内存快照如下所示:
我不知道它们是否是问题,或者它是否是编辑器的东西,但无论如何都要追踪创建渲染纹理的内容?
我们发现的一件事就是加载到boss级别然后返回HUB区域实际上会减少内存(从Boss - > HUB区域开始后大约为800MB)。但是我不确定为什么会触发内存被清除。
目前在Unity 5.5.0f3上
如果有人对于为什么会发生这种情况有任何想法,或者可能会有所帮助,那么我们将非常感激。
谢谢
答案 0 :(得分:0)
您应该使用Unity附带的探查器来分析应用程序。 基于此,你应该能够找出拥抱记忆的东西。
如果您使用地图集,则需要确保以全部容量使用它们:仅使用精灵或2(例如用于UI)将加载整个地图集。在这种情况下,最好将地图分成较小的地图。
您可能还需要弄清楚代码的某些部分是否保留对资产的引用。如果他们这样做并且抄写员在改变场景中存活下来,那么你将会被泄露并且#34;存储器中。
另一个要点是,一旦改变场景,Unity就不会释放内存。