您当前的位置: 首页 >  unity

VT LI

暂无认证

  • 8浏览

    0关注

    126博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

VT LI 发布时间:2019-01-29 20:05:05 ,浏览量:8

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

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

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

非常崩溃!

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

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

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

非常崩溃!

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

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

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

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

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

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

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

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

其他的实现也要类似执行

 

关注
打赏
1649603425
查看更多评论
立即登录/注册

微信扫码登录

0.2338s