码迷,mamicode.com
首页 > 其他好文 > 详细

资源加载卸载与内存的关系

时间:2015-04-11 18:00:35      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:unity   内存   

22 关于Resources.load和实例化与内存的关系:
1.加载,单纯的Resources.load后消耗的内存很低,可能只是基础的引用预载、当对象被实例化后才会占用大量内存,当实例化多个对象后和实例化一个相差不大,可能后边实例的对象引用了第一个。
2.卸载,单纯的把所有实例的obj给destroy后,内存不会释放,但是再次实例也不会耗内存,若Object b = Resources.Load("Canvas");这样写,还需要把b=null后再调用Resources.UnloadUnusedAssets()后整个内存才会被释放。
///最好不要给Resources.Load("Canvas");单独定义变量,如果忘记清除变量引用后,内存就释放不了、清除引用是指Resources.Load的引用而不是实例化对象的引用。
所以建议GameObject a = GameObject.Instantiate (Resources.Load("Canvas") as GameObject这样直接写,然后destroy 这个实例对象后,调用unload 就可以释放内存。
23 关于assetbundle的加载和实例化与内存的关系:
1.对于WWW.LoadFromCacheOrDownload方式加载,单纯的load进来也不耗什么内存,实例化后会耗很多内存,destroy实例对象后,不释放内存。调用Resources.UnloadUnusedAssets()或www.assetBundle.Unload (true);才能完全释放Unload (false)后似乎没有释放或者可能释放量极小。
结论:建议使用assetbundle.Unload (false),实例对象销毁后需要调用Resources.UnloadUnusedAssets()
2.对于WWW www = new  WWW()方式加载,单纯的load需要消耗一份内存,实例化后再消耗一份内存。实例destroy后需要调用Resources.UnloadUnusedAssets()或www.assetBundle.Unload (true);才能释放实例对象内存,不能释放load的内存。Unload (false)后似乎没有释放或者可能释放量极小。
结论:一般最好不要使用该方法加载,会消耗双倍内存,可以用Resources.UnloadUnusedAssets()回收实例对象内存,本身load的内存无法手动回收。
3.对于AssetBundle.CreateFromFile():应该和1的情况类似。卸载资源只要引用没有了调用unload是有效的。

资源加载卸载与内存的关系

标签:unity   内存   

原文地址:http://blog.csdn.net/gy373499700/article/details/44996317

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!