【已测试】U3D 跨两个场景后才释放内存?


我做了一个小Demo
三个场景(SceneA,SceneB,SceneC),默认进入SceneB
其中SceneA有一个Sprite,引用了一个大约为5.3MB(解压后在显存中的大小)的纹理
SceneB 和 SceneA 仅有切换场景的按钮

测试环境为Android真机

测试步骤:
1· 首先进入SceneB , 此时显存占用2.8MB(因为使用NGUI)
2· 进入SceneA, Sprite被加载 显存使用变为8.2MB ( 2.8+5.3 ~=8.2)
3· 切换到SceneB, 显存无变化 仍旧8.2MB
4· 切换到SceneC, 显存降低到2.8(该Sprite用到的纹理被卸载)
================================
疑惑:
为什么在切换到SceneB时候没有释放显存呢?
已邀请:

Vital

赞同来自: tunied Soul94 TMAC0923 lucklycat


的确是这样,这是Unity的问题,在加载下一个场景的时候,其实当前场景内存还没有被释放,直到你再次加载一个场景的时候,第一个场景的资源才会被真正卸载。

所以我们在实际项目中一般做法是:构建一个单独的场景,专门用来做Loading使用,同时异步加载下一个场景,这样既可以提示玩家等待,也可以是否第一个场景的资源!

萧萧

赞同来自: Soul94 优弧


有一片博客说明了这个问题。Unity里面会隔一个场景卸载内存。具体博客,找到后联系你,其实也是说明你测试的内容,得出的结论就是Unity会隔一个场景卸载内存。我看前面也有说到loading场景的作用。目的就是为了隔一个场景。也为了不让主城场景和副本场景的资源同时在内存中,爆内存。loading场景是没什么资源的,都是在加载另一个场景。主城进副本后就把主城资源卸载了,经过loading回主城也是一个原理。

TMAC0923

赞同来自: wayne_tao Sunflower_xxl


涨姿势了,终于明白为啥Loading独占Scene了

tunied

赞同来自: 优弧


又做了进一步测试

1· SceneB->SceneA (显存涨到8.2)
2· SceneA->SceneC (显存没变)
3· SceneC->SceneC (显存降低到2.8)

也就是重复进入同一个场景2次 显存被回收了

海洋

赞同来自: 优弧


你自己再用GC回收一下看看什么情况?不知道Unity底层对回收是如何操作的?不好说清楚为啥是这样的?

yerongsc

赞同来自: 崇慕


Resources.UnloadUnusedAssets,调用过这个吗

夕阳的影子 - 90后 man

赞同来自:


Unity 5 测试了,没有这种情况。。。。。

mishimumu

赞同来自:


在unity5测试了,确实没有这个问题了

Sunflower_xxl

赞同来自:


为什么我测试的内存没有完全释放?

要回复问题请先登录注册