【问题标题】:Free the memoy Destroy Prefab释放内存 Destroy Prefab
【发布时间】:2014-07-19 00:00:04
【问题描述】:

我正在制作一部 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,对同样的问题进行了更好的解释,但他没有答案。

【问题讨论】:

  • 请使用unity3d标签。

标签: memory-management unity3d


【解决方案1】:

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

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

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

Unity 声明更改场景将清除原始场景中的所有内容,除了标记为不会被DontDestroyOnLoad(targetObject); 销毁的对象。如果您真的关心内存使用情况,也许您可​​以尝试稍微修改应用程序的结构。所以每一集都保存为一个场景,而不是一个预制件。

【讨论】:

  • 感谢您的启发!更改场景内存被释放
猜你喜欢
  • 1970-01-01
  • 2011-05-10
  • 1970-01-01
  • 1970-01-01
  • 2013-12-23
  • 2013-12-05
  • 2015-04-22
  • 2011-01-17
  • 2021-12-23
相关资源
最近更新 更多