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()的多次调用?
在python中使用gc.collect()清除内存对缓存数据的queue队列是否有影响