Unity Texture2D内存无法释放,一直占用问题

在开发中,发现new出来的Texture2D赋值到RawImage组件上时,上一个赋值的Texture2D没有被释放,一直在内存中占用,手动调用CG也不行

先说解决方案

//更新RawImage上的图片前,先检查是否存在,如果存在,销毁旧的
 if (RawImage.texture)
{
    Destroy(image.texture);
}
//如果仅仅在代码中使用,则在用完后马上销毁
UnityEngine.Object.Destroy(texture2D)
//或者使用对象池,有一个函数,可以重新初始化texture2d
texture2D.Reinitialize()

先贴一下我搜到的一些解决方案文章,也是他们给我提供了一些解决思路:

https://www.bilibili.com/read/cv14526463/

https://blog.csdn.net/thinbug/article/details/118760149

https://blog.csdn.net/linxinfa/article/details/108347571

解决过程

在排查性能过程中,发现Texture2D一直在占用内存,即使覆盖也还是存在,引用计数一直为1,手动GC也无法释放,然后百度搜罗一下解决方案,发现Texture2D似乎unity无法自动托管,也无法检测当前的Texture2D是不是仍在使用(引用计数都不用了,也还存在)。只要被New过后,就一直存在在内存中(Unity你别tmd搞营销了,修修bug不好吗?)。

所以只能进行手动调用销毁来释放其在内存中的占用。

按F12进入到RawImage的函数里,看到这个注释:

翻译后

题外话:在排查中发现一个神奇的东西,在任务管理器中看到内存一直涨后,我用360加速球清了一下,任务管理器的unity内存是被成功的释放了,肉眼可见内存占用少了,但跳回到unity,发现占用还是存在。可能仅仅是把那块内存休眠了吧?!

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值