有时我们需要在游戏开发中手动释放无用的资源。但我不确定哪个更好
System.GC.Collect();
Resources.UnloadUnusedAssets();
和
Resources.UnloadUnusedAssets();
System.GC.Collect();
AFAIK,它们都是异步操作,可能没有区别。
所以我的问题是...
- 有什么区别吗?
- 如果是这样,哪个更好?
有时我们需要在游戏开发中手动释放无用的资源。但我不确定哪个更好
System.GC.Collect();
Resources.UnloadUnusedAssets();
和
Resources.UnloadUnusedAssets();
System.GC.Collect();
AFAIK,它们都是异步操作,可能没有区别。
所以我的问题是...
这两种没有区别。
System.GC.Collect()
将告诉 .Net 收集器在托管堆中收集由 mono 管理的对象,同时Resources.UnloadUnusedAssets
处理放在本机堆中的资产(纹理、声音和其他媒体)。这两种方法做的事情完全不同,所以先执行哪一个没有区别。(正如您所说,它们都是异步的,您只需设置一个标志来建议系统可能是进行收集的好时机。)
事实上,调用 GC 收集自己并不常见,除非你有充分的理由。系统的 GC 会在适当的时候工作,大多数强制垃圾收集的调用并不像你想象的那么必要。
如果你对 Unity 的内存有更多的疑惑,可以参考这篇博客,里面可以很详细的告诉你。
正如统一人所说,UnloadUnusedAssets 内部也调用 System.GC.Collect(); 所以如果你调用 UnloadUnusedAssets,你不需要调用 System.GC.Collect