Unity - 更改场景后内存不会减少

时间:2017-02-23 03:53:56

标签: memory unity3d

很抱歉在这里发帖,但我绝望了。

我们似乎有很多内存在加载新场景时没有被释放。当前加载过程以1级开始,使用单例加载屏幕加载到空场景中然后调用System.GC.Collect();和Resources.UnloadUnusedAssets(); (以防万一)然后加载下一级。但是级别只会使内存大小增加,即使在重新加载现有场景时,内存也会增加。

以下是对所发生情况的简要概述:

  • 加载到HUB区域的开始时间约为590,000K(根据任务管理器的内存使用情况而定)。这似乎没问题,因为它是一个3D环绕区域
  • 转换到空场景后(通过上面)仍然有程序在405,000K
  • 启动后,第一个实际级别内存为840,000K
  • 再次装回空场景后,内存为750,000K
  • 在开始新级别(级别2)后,它跳转到1,195,000K
  • 在如上所述加载回空场景后,内存为1,010,000K
  • 然后返回到HUB世界的统计数据(通过上面的加载转换)内存为1,227,000K

我不认为这是一个统一的资产泄漏,因为我已经完成清理程序网格/材料,并且在空的加载屏幕中我查找了UnityObjects存在的内容,它只有这个(之后)上述过程):

Loading Scene Results

此时的内存快照如下所示:

Memory Snapshot

我不知道它们是否是问题,或者它是否是编辑器的东西,但无论如何都要追踪创建渲染纹理的内容?

我们发现的一件事就是加载到boss级别然后返回HUB区域实际上会减少内存(从Boss - > HUB区域开始后大约为800MB)。但是我不确定为什么会触发内存被清除。

目前在Unity 5.5.0f3上

如果有人对于为什么会发生这种情况有任何想法,或者可能会有所帮助,那么我们将非常感激。

谢谢

1 个答案:

答案 0 :(得分:0)

您应该使用Unity附带的探查器来分析应用程序。 基于此,你应该能够找出拥抱记忆的东西。

如果您使用地图集,则需要确保以全部容量使用它们:仅使用精灵或2(例如用于UI)将加载整个地图集。在这种情况下,最好将地图分成较小的地图。

您可能还需要弄清楚代码的某些部分是否保留对资产的引用。如果他们这样做并且抄写员在改变场景中存活下来,那么你将会被泄露并且#34;存储器中。

另一个要点是,一旦改变场景,Unity就不会释放内存。