unity静态引用“managedstaticreferences”解决方式

大家如果做了优化,或者注意过profile应该都会关注到一个内存问题,静态引用“managedstaticreferences”。。如果第一次遇到他,确实是一个可怕的家伙。你没办法定位他的错误位置,只会显示这一串英文给你看。

然后上网看了很多解决办法都是在说跟static里面的变量相关。

于是我一开始会关注到代码里面的静态变量,也包括单例。但我发现就算我把静态变量去掉,单例去掉其实还是有这个出现。

非常崩溃!

于是我就关注到他显示的静态引用的堆栈,比如这个

可以看到他的对战时关于LTInstanceWallObj。然后可以看多几个堆栈,其实都时跟这个相关。所以我就从LTInstanceWallObj着手看看究竟会是怎么回事。

但其实代码很简单,而且更致命的是没有任何静态变量或单例之类的。

非常崩溃!

然后我们再看看他堆栈上,这个静态引用有什么内容

这个内容跟在prefab上的相关。

于是我尝试把floor和wall的引用去掉,我自己来加载

其中GetAssetSync中是通过两种方式执行

如果是editor下则直接用AssetDatabase.LoadAssetAtPath执行,如果是AB包则用assetBundle.LoadAsset执行。(一般不建议放到resource下)

然后就是卸载了,如果destroy该界面就要执行卸载了。但我放在了Disable执行

这里是做了两个行为,如果是ab包则执行assetBundle.Unload并把记录的字典去掉,如果是editor下的直接设置为null就好。

最终这个静态引用不存在了。

其他的实现也要类似执行

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值