在Unity3D中GC和卸载资源的顺序是什么?

7
有时候在游戏开发中我们需要手动释放无用的资源。但我不确定以下哪个选项更好:
System.GC.Collect();
Resources.UnloadUnusedAssets();

并且

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

据我所知,它们都是异步操作,可能没有什么区别。
因此我的问题是...
1.有什么区别吗? 2.如果有的话,哪个更好?

UnloadUnusedAsset是异步的,但实际上你可以yield等待它结束。 - Heisenbug
2个回答

10

这两种方法没有区别。

System.GC.Collect()会告诉.Net收集器收集受mono管理的托管堆中的对象,而Resources.UnloadUnusedAssets处理被放置在本机堆中的资源(纹理、声音和其他媒体)。这两种方法完全不同,因此执行哪个方法不重要。(就像你所说的,它们都是异步的,你只需设置一个标志以建议系统进行垃圾回收。)

实际上,除非你有充分的理由,否则很少自己调用GC collect。系统的GC会在适当的时间工作,大多数强制进行垃圾收集的调用并不像你想象的那样必要。

如果你想了解更多关于Unity内存的信息,可以参考这篇博客,其中详细介绍了相关知识。


1

正如 Unity 的大佬所说,UnloadUnusedAssets 方法内部也会调用 System.GC.Collect();因此,如果你已经调用了 UnloadUnusedAssets 方法,就不必再调用 System.GC.Collect 方法了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接