Unity3D中GC和卸载资产的顺序

时间:2013-07-09 01:30:06

标签: c# memory-management garbage-collection unity3d

有时我们需要在游戏开发中手动释放无用的资源。 但我不确定

之间哪个更好
System.GC.Collect();
Resources.UnloadUnusedAssets();

Resources.UnloadUnusedAssets();
System.GC.Collect();

AFAIK,它们都是异步操作,可能没有区别。

所以我的问题是......

  1. 有什么不同吗?
  2. 如果是,哪个更好?

2 个答案:

答案 0 :(得分:9)

这两种没有区别。

System.GC.Collect()将告诉.Net收集器收集托管堆中由mono管理的对象,而Resources.UnloadUnusedAssets处理放在本机堆中的资产(纹理,声音和其他媒体) 。这两种方法完全不同,所以首先执行哪一种方法没有区别。 (正如你所说,它们都是异步的,你只需设置一个标志就可以建议系统进行收集。)

事实上,除非你有充分的理由,否则自称GC收集并不常见。系统的GC将在适当的时间工作,大多数强制垃圾收集的呼吁都没有你想象的那么必要。

如果您想了解有关Unity内存的更多信息,可以参考this blog,它可以详细告诉您具体内容。

答案 1 :(得分:0)

内部unity guy said的UnloadUnusedAssets也调用System.GC.Collect();。因此,如果您调用UnloadUnusedAssets,则无需调用System.GC.Collect