unity3d深入学习笔记5:内存释放

 

推荐地址:

http://www.cnblogs.com/U-tansuo/archive/2013/04/02/unity3d_memory_optimization.html

 

首先:Unity3d提供的Object.Destroy和Object.DestroyImmediately有什么区别呢?

 

有人在使用Destroy的时候说销毁的物体,但是他还存在于场景中(我没遇到过-.-),不过有这种可能,Destroy是暂时删掉组件的引用,如果内存够用,并不会在内存中直接删除,在下次加载这个这个组件的时候会更快,unity为了防止一个物体多次加载造成性能的浪费就给了这个接口,同时也是为了防止直接删除可能出现的一些问题。而Object.DestroyImmediately就是直接连内存删掉不多说。

         在开发项目尤其是2d项目,一般会用的NGUI那么问题就解决了,NGUI给了一个接口:NGUITools.Destroy函数,看看这个函数的内容:

         static public void Destroy(UnityEngine.Object obj)

         {

                   if (obj != null)

                   {

                            if (obj isTransform) obj = (obj as Transform).gameObject;

 

                            if (Application.isPlaying)

                            {

                                     if (obj isGameObject)

                                     {

                                              GameObjectgo = obj as GameObject;

                                              go.transform.parent= null;

                                     }

 

                                     UnityEngine.Object.Destroy(obj);

                            }

                            elseUnityEngine.Object.DestroyImmediate(obj);

                   }

         }

无疑是一种安全的方式

Destroy: 主要用于销毁克隆对象,也可以用于场景内的静态物体,不会自动释放该对象的所有引用。虽然也可以用于Asset,但是概念不一样要小心,如果用于销毁从文件加载的Asset对象会销毁相应的资源文件!但是如果销毁的AssetCopy的或者用脚本动态生成的,只会销毁内存对象。
   
AssetBundle.Unload(false):释放AssetBundle文件内存镜像
   
AssetBundle.Unload(true):释放AssetBundle文件内存镜像同时销毁所有已经LoadAssets内存对象
   
Reources.UnloadAsset(Object):显式的释放已加载的Asset对象,只能卸载磁盘文件加载的Asset对象
   
Resources.UnloadUnusedAssets:用于释放所有没有引用的Asset对象
   
GC.Collect()强制垃圾收集器立即释放内存 UnityGC功能不算好,没把握的时候就强制调用一下(这个东西占用CPU高,无论以何总方式,导致这个函数的出现,都有可能出现CPU使用过高而黑屏退出的现象,小心使用)

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

左右...

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值