Resources.UnloadUnusedAssets
2017.11.7更新:
其实这个函数就是顾名思义,关键是理解AssetBundle, Asset, GameObject, 资源等之间的关系,参考此文即可:
http://www.cnblogs.com/88999660/archive/2013/03/15/2961663.html
---------------------------------羞耻的分割线-------------------------------------------
项目每60秒执行一次Resources.UnloadUnusedAssets。所以后续的GC不会一下子需要清理很多内存,所以游戏不会卡顿。
下面是查阅一下资料得到观点,应该有错漏,希望大神指正,谢谢。
1.
官方说法:An asset is deemed to be unused if it isn't reached after walking the whole game object hierarchy,
including script components. Static variables are also examined.
The script execution stack, however, is not examined so an asset referenced
only from within the script stack will be unloaded。
And, if necessary, loaded back in the next time one of its properties or methods is used.
This requires extra care for assets which have been modified in memory.
Make sure to call EditorUtility.SetDirty before an asset garbage collection is triggered.
我对上面的理解是,Resources.UnloadUnusedAssets只对Unity的组件脚本内的变量/属性引用的资源和所有静态变量引用的
(静态类的成员引用也算,这里的引用包括多重引用)资源,进行unused标记unload,因为剩下的就是栈上变量(local variable)引用的资源,
这些资源会在变量出栈时unload掉(应该是类似UnloadUnusedAssets),如果这时要再使用这些资源,就需要重新load,即modified in memory。
这里的理解有误的话,麻烦指出。
2.
现在的老大说,Resources.UnloadUnusedAssets只是标记,并不清理,并且不是标记为空闲(这个是GC干的,就是mono的清理,因为mono不归还内存给os,只在mono层标记为空闲,os层还是使用中),只是把该块内存降级,让gc清理。
所以destroy an object后调Resources.UnloadUnusedAssets并没有卵用,要等GC来了才生效。
3.
UnloadUnusedAssets - what exactly does "unused" mean:
1)静态变量引用的资源;Monobehavior中变量/属性引用的资源 视为“used”
2)被C#层强引用的资源,视为“used”
3) 弱引用被Unity视为“unused”,是会被清掉的;
但是(先GC.Collect,再UnloadUnusedAssets则暂时清不掉,下次GC.Collect才能,或者交换顺序就能立刻清掉)
来源(已收入wiki):http://answers.unity3d.com/questions/910845/unloadunusedassets-what-exactly-does-unused-mean.html
4.
It only unloads assets that have been destroyed:
意思是我们Destroy掉的GameObject还是占着内存,被这个接口标记后才能被gc回收。
这个说法对吗?
来源:http://answers.unity3d.com/questions/720239/does-unloadunusedassets-unload-non-active-or-occlu.html
Resources.UnloadUnusedAssets的更多相关文章
- 关于AB包的释放与 Resources.UnloadUnusedAssets的关系
Resources.UnloadUnusedAssets 并不能释放AB包中东西,只能释放从AB包中加载出来的资源,也可以释放场景中的资源,其它不是从AB包加载来的资源. AB加载后,整个包都加载到内 ...
- Unity AssetBundles and Resources指引 (四) AssetBundle使用模式
本文内容主要翻译自下面这篇文章 https://unity3d.com/cn/learn/tutorials/topics/best-practices/guide-assetbundles-and- ...
- Unity AssetBundles and Resources指引 (一)
本文内容主要翻译自下面这篇文章 https://unity3d.com/cn/learn/tutorials/topics/best-practices/guide-assetbundles-and- ...
- Unity 最佳实践
转帖:http://www.glenstevens.ca/unity3d-best-practices/ 另外可以参考:http://devmag.org.za/2012/07/12/50-tips- ...
- 玩转Unity资源,对象和序列化(下)
本文将从Unity编辑器和运行时两个角度出发,主要探讨以下两方面内容:Unity序列化系统内部细节以及Unity如何维护不同对象之间的强引用.另外还会讨论对象与资源的技术实现差别. 译注:除非特别说明 ...
- Unity内存理解(转)
Unity3D 里有两种动态加载机制:一个是Resources.Load,另外一个通过AssetBundle,其实两者区别不大. Resources.Load就是从一个缺省打进程序包里的AssetBu ...
- Unity3D中可中途释放的单例
Unity3D中可中途释放的单例 使用静态类,静态变量的坏处是从程序加载后就一直占用内存,想要释放比较麻烦,可是之前使用的单例,没有提供释放的方法,那是不是也同静态的一样直到程序结束菜释放?那单例的好 ...
- [转]全面理解Unity加载和内存管理
[转]全面理解Unity加载和内存管理 最近一直在和这些内容纠缠,把心得和大家共享一下: Unity里有两种动态加载机制:一是Resources.Load,一是通过AssetBundle,其实两者本质 ...
- KEngine:Unity3D资源的打包、加载、调试监控
资源模块做什么? 资源模块——ResourceModule,是KEngine中最核心的模块,其他模块基本或多或少的对它有依赖,它主要的功能是:资源打包.路径定义.资源管理.资源调试. 资源模块对Uni ...
随机推荐
- office2010的破解工具
office2010的破解工具,找了好多的密钥都不合适,直接用这个软件一键搞定, 下载地址:https://pan.baidu.com/s/1phPwihCDipGwGdSmjWNeYw 提取码:8m ...
- 用了Dapper之后通篇还是SqlConnection,真的看不下去了
一:背景 1. 讲故事 前几天看公司一个新项目的底层使用了dapper,大家都知道dapper是一个非常强大的半自动化orm,帮程序员解决了繁琐的mapping问题,用起来非常爽,但我还是遇到了一件非 ...
- BiMPM:Bilateral Multi-Perspctive Matching for Natural Language Sentences
导言 本论文的工作主要是在 'matching-aggregation'的sentence matching的框架下,通过增加模型的特征(实现P与Q的双向匹配和多视角匹配),来增加NLSM(Natur ...
- 《Python测试开发技术栈—巴哥职场进化记》—软件测试工程师“兵器库”
上文<Python测试开发技术栈-巴哥职场进化记>-初来乍到,请多关照 我们介绍了巴哥入职后见到了自己的导师华哥,第一次参加团队站会,认识了团队中的开发小哥哥和产品小姐姐以及吃到了公司的加 ...
- C#LeetCode刷题-数学
数学篇 # 题名 刷题 通过率 难度 2 两数相加 29.0% 中等 7 反转整数 C#LeetCode刷题之#7-反转整数(Reverse Integer) 28.6% 简单 8 字符串转整数 ...
- C#LeetCode刷题之#706-设计哈希映射(Design HashMap)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4116 访问. 不使用任何内建的哈希表库设计一个哈希映射 具体地说 ...
- 使用 VMware Workstation Pro 让 PC 提供云桌面服务——学习笔记(二)
实验效果: 这次希望的效果是能够用远程桌面来实现 . 这里参考了博客 https://www.cnblogs.com/wwang/archive/2011/01/06/1928933.html 操作步 ...
- 图的DFS与BFS
图的DFS与BFS(C++) 概述 大一学生,作为我的第一篇Blog,准备记录一下图的基本操作:图的创建与遍历.请大佬多多包涵勿喷. 图可以采用邻接表,邻接矩阵,十字链表等多种储存结构进行储存,这里为 ...
- Spring Boot 教程 - MyBatis-Plus
1. Mybatis-Plus简介 MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发.提高效率而生. 为什么说Myba ...
- 遗传算法框架-基于java jenetics库实现
本篇并非介绍如何从0开始开发遗传算法框架,反而推荐各位使用已有的GA库jenetics来做遗传算法. GA算法的逻辑还是贴下: 好了,下面介绍的是基于jenetics开发的更贴近业务侧的框架,以及使用 ...