当前位置: 首页 > news >正文

手机网站如何建站如何创建网站 优帮云

手机网站如何建站,如何创建网站 优帮云,网站新站,北京综素网址项目一运行#xff0c;占用的内存越来越多#xff0c;不会释放#xff0c;导致GC越来越频繁#xff0c;越来越慢#xff0c;这些都是为什么呢#xff0c;今天从UI方面谈起。 首先让我们来聊聊什么是内存泄漏呢#xff1f; 一般来讲内存泄漏就是指我们的应用向内存申请…项目一运行占用的内存越来越多不会释放导致GC越来越频繁越来越慢这些都是为什么呢今天从UI方面谈起。 首先让我们来聊聊什么是内存泄漏呢 一般来讲内存泄漏就是指我们的应用向内存申请了一块地址然后这块地址的相关引用全部丢失了这块内存无法再被分配在计算机眼里那就是丢了找不回来了除非重启。。。 不过这里如果我们要去理解Unity中的内存泄漏那我们首先要了解一下Unity的内存分配机制和GC机制哇不过说真的要真是细说这两点那真是几天都讲不完呀还是算了哈哈这里大概聊一下 程序在运行的时候会先从计算机中申请一块内存这时候如果我们需要去申请一块地址的时候Unity会先去从堆内存中找合适大小的地址块给我们但是这时候如果堆内存用完了这时候GC就出马了会先清理一遍当前内存中无用的数据然后给我们分配所需要的内存块那这个时候如果GC之后还是没有找到足够大小的内存给我们用怎么办呢Unity只能去在申请一块之前内存2被大小的内存了。 这时候来想想如果在我们的项目中这如果不断重复上述步骤那么这时候是不是就意味着内存泄漏了呢。。。  现在就让我们开始从实际情况来一探究竟吧 一开始我们通过Unity的Profiler工具只能看到在我们的UI已经关闭销毁了可是UI里面用到的图集还在内存里面存在不应该呀如果图集不释放那岂不是意味着我们如果打开很多UI的时候这些图集资源就要占到很多内存如何查看当前内存中图集情况可以参考下图先选中Memory模块然后选择Detailed点击Take Sample Playmode这时候内存中的图集就出现在下面了参考5的位置这里说明一下位置4这个选项如果不勾选进行内存采样速度会快很多勾选了会慢很多但是会同时采样出对应资源当前的引用情况。 这时候我们通过对游戏中不同节点进行内存采样便能分析出我们哪些图集没有随着预设的销毁而销毁。 问题已经找到了那么如何解决呢如何下手呢这时候又不知道怎么办了害 但是生活还要继续问题还得解决呀那么接下来就开始了问题分析无数次Demo测试从AB包加载卸载到Unity内存分配管理从GC的工作方式到GC的底层实现原理终于发现了这几个问题。 首先如果我们的项目是通过AssetBundle方式加载的那么在我们切场景或者进行阶段变化的时候我们需要处理一下无用资源的释放调用一下下面的接口。 Resources.UnloadUnusedAssets();  卸载未使用的资源 这时候我们在进行内存对比分析的时候会发现会有一些内存被释放可是图集不销毁的问题还在害还以为挺简单的目前看来问题更复杂了。。。 这时候用上了另一个工具Memory Profiler这个工具是在Unity2020之后的版本推出的功能对当前内存进行快照可视化的形式显示当前内存分配的大小列出了每个托管对象的类型值占用大小地址被引用链等等信息还可以进行快照对比分析两次内存快照新增、删除和保持不变的内存对象从而更方便快捷的定位项目内存的使用情况。 通过对内存进行快照分析图集的引用链屏蔽代码重新快照测试一次次的测试慢慢缩小代码范围定位图集不销毁的原因最终发现原来是我们的UI使用了static实例来实现单例效果在其他地方调用但是在我们UI不需要的时候并没有将这个静态单例设置为null导致整个UI资源的相关引用一直存在无法释放还有就是我们在对按钮进行事件注册的时候使用了项目封装的接口而项目封装的接口在拿到委托事件对象后并没有在移除事件的时候去清除委托事件对象导致引用一直存在相关的资源也就无法释放。 相信经过上述步骤之后我们的图集不销毁问题已经解决了大部分了具体还有哪些后面有需要我们再补充哈哈。 这里再说一个图片不销毁问题在项目中我们经常会去动态替换某些图片来实现我们的功能这时候有一个统一接口就很方便了可是图片不销毁问题也正好跟这个动态替换接口有关由于我们的统一接口会保存一份加载的图片的引用在对应预设销毁的时候由于图片引用一直存在所以图片就无法被GC处理掉这时候我们可以考虑对我们动态加载的图片进行场景管理在合适的时候清空一次引用列表还有由于我们动态图片加载是自己管理加载资源所以我们在清空列表的时候要调用一次对应接口的卸载资源接口否则资源还是无法从内存中释放。 目前为止图集图片不销毁问题已经解决了大部分至于项目中具体还有没有其他问题导致有待后续研究总结一下 使用了static静态类方式来实现单例的UI在使用完之后一定记得将对应单例设置为null让GC可以去释放对应的内存。在使用委托或者其他时候拿到类对象的引用在使用完之后一定要记得释放引用。加载的资源在不适用的时候记得卸载掉比如AssetBundle.Load和AssetBundle.Unload在适当的时机调用Resource.UnloadUnusedAssets()接口释放无用的资源 简而言之言而简之内存优化一直是项目开发中的重头戏任重而道远呀。。。 心怀梦想    奔向远方
http://www.eeditor.cn/news/126562/

相关文章:

  • 谷歌官网首页廊坊seo关键词优化
  • 网站推广软件哪个最好大型网站建设公司推荐
  • 网站网页设计的组成十大免费ppt网站在线
  • 做视频网站犯法吗网络安全防护
  • 深圳市手机网站建设一般网站维护费用
  • 北京建站免费模板企业网站建设是什么实现的物质基础和技术支撑
  • 网站建设优化怎么做wordpress网页自适应屏幕大小
  • 什么网站找厂做袜子Wordpress手机 菜单
  • php开源公司网站免费建一级域名网站
  • 英文网站模板改成中文中国做外贸的网站有哪些
  • 网站标题的优化在线页面设计工具
  • phpcms v9网站地图爱站网站长seo综合查询
  • 看公狍和女人做爰网站宁波seo网络推广代理价格
  • 网站建设费用一年自适应影视网站模板
  • 小语种网站建设深圳网站建设 设计创公司
  • 做网站的数据库的步骤关键字优化
  • 海外购物网站建设十大网站建设
  • 网站内容策划书二手建筑铝模板哪里有卖
  • 卢松松的网站浙江城乡建设局和住建局
  • 2019年做网站还有前景吗做网站要在工商备案吗
  • 网站建设学校wordpress 获取当前文章栏目链接
  • 江苏大汉建设实业集团网站广州越秀网站建设
  • 建设网站哪专业霸气的公司名字大全
  • 外贸企业网站推广网络代码怎么学
  • 太原网站建设方案推广中国徐州网
  • 沈阳建立网站安阳市建设工程领域网站
  • 无锡网站建设 微信网站收录目录源码
  • 百度地图嵌入公司网站长春有几个火车站
  • 吉林电商网站建设公司电话wordpress图像缩放插件
  • 深圳住房建设局网站申报网站开发设计手册