unity中gc.collect和resources.unloadunusedassets功能有啥异同

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity中gc.collect和resources.unloadunusedassets功能有啥异同相关的知识,希望对你有一定的参考价值。

参考技术A 题目中的问题,关心的朋友都是因为在使用的过程中突然想起的,回答这个问题只要用一小段代码反复load一张同样的图在profile里看就可以得到答案。
void TestSameTextureLoad()

for (int i = 0; i lt; 30; i++)

textureList.Add((Texture2D)Resources.Load(quot;testquot;));

texturePtr = (Texture2D)Resources.Load(quot;testquot;);





结果是:
unity只消耗一张图的内存,也就是同样的资源,不会消耗多份资源。
这个结论也是3D引擎内部为什么对资源使用共享指针的一个说明:资源是共享的,每个资源都有一个引用值,当有一个指针引用到它,这个指针就加一。反之,减去一。当引用值是0的时候,引擎就可以释放这个资源占用的内存。对于Unity来说,资源的引用值归0后,需要用Resources.UnloadUnusedAssets()来促使引擎释放所有引用值为0的资源。本回答被提问者采纳

Unity加载场景 异步 清理资源

参考技术A IEnumerator StartNextLevel()



Caching.CleanCache();

Resources.UnloadUnusedAssets();

System.GC.Collect();

yield return new WaitForSeconds(0.5f);

asyn = SceneManager.LoadSceneAsync(AppManager.data.SceneName);

FadeScene.FadeIn();

yield return asyn;

以上是关于unity中gc.collect和resources.unloadunusedassets功能有啥异同的主要内容,如果未能解决你的问题,请参考以下文章

垃圾收集器是否受益于对Collect和WaitForPendingFinalizers()的多次调用?

如何替换对 GC.Collect 的调用?

Dispose 中的 GC.Collect() 简单类

在python中使用gc.collect()清除内存对缓存数据的queue队列是否有影响

unity3d中StreamingAssets和Resources目录的区别

Unity中 动态加载 Resources.Load()和Asset Bundle 的区别