unity ugui texture2d 资源占用 内存泄漏问题解决办法 【unity gc,垃圾回收,内存优化】 debug工具Profiler的使用方法

有这么个场景,用UnityWebRequest或www或besthttp方式从网络下载图片资源,然后转成texture2d在unity程序中显示。但频繁切换或关闭打开后,会发现内存占用越来越大,最后就白屏无响应了。
为什么明明destroy了ui 的gameobject,资源却不释放呢? 原来unity的资源有一层缓存机制,不管是否被调用,在启动资源清理功能前都会驻留在内存中了。

定位问题

在unity编辑器中运行程序,
然后打开window -》Profiler, 往下拉,看到Memery,点击下面工具栏的simple,选择detailed,就会出现当前的程序资源占用情况
选择scene asset,找到texture2d 就时当前程序中所有texture2d资源(图片资源),后面的数字是引用,如果后面数字消失了,那么这个就是可以卸载的,如果数字一直存在,就不能卸载。

卸载未被调用的资源

调用以下两行代码,未被调用的资源就会被卸载

Resources.UnloadUnusedAssets();//卸载未占用的asset资源
System.GC.Collect();//回收内存
卸载被盗用的资源

如果该资源被metarel 调用,那么就调用该材质对象的SetTexture("_MainTex", null);
然后在使用卸载函数。

Resources.UnloadUnusedAssets();
System.GC.Collect();
自动清理内存

正常情况下,unity 在运行时,如果有足够的内存空间,就会一直不停的分配内存,不会清空未调用资源。当内存不足时才会自动调用内存清理。

使用资源池 + 单例,保存资源可以起到缓存和减少加载操作的目的
  • 12
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

千年奇葩

从来没受过打赏,这玩意好吃吗?

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

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

打赏作者

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

抵扣说明:

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

余额充值