7

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

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

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

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

所以我的问题是...

  1. 有什么区别吗?
  2. 如果是这样,哪个更好?
4

2 回答 2

10

这两种没有区别。

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

事实上,调用 GC 收集自己并不常见,除非你有充分的理由。系统的 GC 会在适当的时候工作,大多数强制垃圾收集的调用并不像你想象的那么必要。

如果你对 Unity 的内存有更多的疑惑,可以参考这篇博客,里面可以很详细的告诉你。

于 2013-07-09T04:32:30.070 回答
0

正如统一人所说,UnloadUnusedAssets 内部也调用 System.GC.Collect(); 所以如果你调用 UnloadUnusedAssets,你不需要调用 System.GC.Collect

于 2018-11-23T05:10:47.163 回答