释放内存Destroy Prefab

时间:2014-07-18 12:03:56

标签: memory-management unity3d

我正在制作2D的互动漫画,分为“剧集”。 目前我正在使用Unity Profiler进行内存优化。

我的目标是仅在RAM中加载用户选择查看的剧集。

为此,我正在使用:

GameObject prefab = Resources.Load ("name_prefab") as GameObject; 
GameOject obj = Instantiate (prefab) as GameObject; 

当我销毁剧集时,请执行以下命令:

Destroy (obj); 

obj = null; 

Resources.UnloadUnusedAssets (); 

但内存使用量没有像我预期的那样改变。

我做错了什么?

在另外使用assetBundle我正在做但我宁愿避免它们,因为当时剧集只出现在本地,那么它似乎是浪费。

以下another post有更好的解释相同的问题,但他没有答案。

1 个答案:

答案 0 :(得分:1)

Resources.UnloadUnusedAssets();释放分配给超出范围的资产对象的内存。在您提供的代码段中,对预制件的引用仍然存在。这可能是预制件仍然在记忆中徘徊的主要原因。

即使有标记为“应该被销毁”的对象,也不会立即释放分配给这些对象的内存。现场后面的垃圾收集器的工作是决定何时清理挥之不去的垃圾。

垃圾收集涉及昂贵的操作,这会对性能产生影响。这就是为什么垃圾收集器偶尔会做它的工作。通常,当您更改场景或内存使用率达到特定阈值时,它会发挥作用。互联网上有很多文章可以找到。我相信official manual可以让您对此主题有基本的了解。

Unity指出,改变场景将消除原始场景的所有内容,但DontDestroyOnLoad(targetObject);标记为不被破坏的对象除外。如果您真的关心内存使用情况,也许您可​​以尝试稍微修改应用程序的结构。因此,每集都会保存为场景,而不是预制件。