Unity3D中GC和卸载资产的顺序

Joo*_*ong 7 c# garbage-collection memory-management unity-game-engine

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

System.GC.Collect();
Resources.UnloadUnusedAssets();
Run Code Online (Sandbox Code Playgroud)

Resources.UnloadUnusedAssets();
System.GC.Collect();
Run Code Online (Sandbox Code Playgroud)

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

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

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

one*_*cat 9

这两种没有区别.

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

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

如果您想了解有关Unity内存的更多信息,可以参考这个博客,它可以详细告诉您.