1.最近的项目中,在修改公司之前的项目将其打出Webgl后发现内存溢出了,但是在Editor里没有这个现象,继续在Editor里,发现果然这个项目内存越占越多,如下图所示:

2.打开Unity的Profiler,选择Memory,运行项目,果然此项目一直在创建Texture,如下图所示。

3.找了一会儿,发现是点击翻页按钮时,占用的内存一直在增加,于是查看这个按钮的代码,果然发现了问题,方法里竟然在一直创建Texture,而且不做回收内存的处理,真不知道之前的开发人员是怎么开发的,而且这么简单的翻页功能要做这么复杂,代码如下:

public void NextStep() {          if (nowStep < steps.Length-1 && nowstepNum > 0) {nowStep++;nowstepNum--;if (nowStep == 4 || nowStep == 10) { cover.enabled = false; }if (nowStep == 8 || nowStep == 22) { cover.enabled = true; }//steps[nowStep]//改变提示文字hint.text = steps[refSteps[nowStep]].hintText;//更换当前步骤各个窗口的图片if (steps[refSteps[nowStep]].bgImageAsset.Length > 0) {for (int i = 0; i < steps[refSteps[nowStep]].bgImageAsset.Length; i++) {Texture2D texture = new Texture2D(steps[refSteps[nowStep]].width, steps[refSteps[nowStep]].height);texture.LoadImage(steps[refSteps[nowStep]].bgImageAsset[i].bytes);texture0 = texture;//这里一直在创建Texture未做内存回收Sprite sprite = Sprite.Create(texture0, new Rect(0, 0, steps[refSteps[nowStep]].width, steps[refSteps[nowStep]].height), pivot);steps[refSteps[nowStep]].accepter[i].sprite = sprite;}}}if ( nowstepNum == 0 && missionNum < missionButton.Length - 1 ) {missionButton[missionNum + 1].enabled = true;missionButton[missionNum + 1].transform.GetComponentInChildren<Text>().color = new Color(0.184f, 0.475f, 0.494f, 1);}}

4.经过查阅相关api,感觉只有把创建的texture回收就好了,于是在上述方法中添加了一个协程,完美地解决了这个问题。代码如下:

public void NextStep() {          if (nowStep < steps.Length-1 && nowstepNum > 0) {nowStep++;nowstepNum--;if (nowStep == 4 || nowStep == 10) { cover.enabled = false; }if (nowStep == 8 || nowStep == 22) { cover.enabled = true; }//steps[nowStep]//改变提示文字hint.text = steps[refSteps[nowStep]].hintText;//更换当前步骤各个窗口的图片if (steps[refSteps[nowStep]].bgImageAsset.Length > 0) {for (int i = 0; i < steps[refSteps[nowStep]].bgImageAsset.Length; i++) {Texture2D texture = new Texture2D(steps[refSteps[nowStep]].width, steps[refSteps[nowStep]].height);texture.LoadImage(steps[refSteps[nowStep]].bgImageAsset[i].bytes);texture0 = texture;Sprite sprite = Sprite.Create(texture0, new Rect(0, 0, steps[refSteps[nowStep]].width, steps[refSteps[nowStep]].height), pivot);steps[refSteps[nowStep]].accepter[i].sprite = sprite;StartCoroutine(ToDestoryThis(texture));}}}if ( nowstepNum == 0 && missionNum < missionButton.Length - 1 ) {missionButton[missionNum + 1].enabled = true;missionButton[missionNum + 1].transform.GetComponentInChildren<Text>().color = new Color(0.184f, 0.475f, 0.494f, 1);}}
//回收内存的协程IEnumerator ToDestoryThis(Texture2D thisSprite){yield return new WaitForSeconds(0.1f);//Destroy(thisSprite);Resources.UnloadUnusedAssets();//卸载未占用的asset资源System.GC.Collect();//回收内存}

5.打开Profiler,运行项目,发现没有内存没有变化,完美解决。如下图所示:

6.打出webgl,运行,也没有内存溢出导致的崩溃,yean!又学到了。

Unity频繁创建Texture造成内存溢出解决办法相关推荐

  1. Tomcat内存溢出解决办法

    工作中,Tomcat内存溢出遇到两次了,就在网上找了些资料,将解决办法分享一下:   使用Java程序从数据库中查询大量的数据时出现异常: java.lang.OutOfMemoryError: Ja ...

  2. java 大数据处理之内存溢出解决办法(一)

    http://www.cnblogs.com/a757956132/p/4644910.html http://my.oschina.net/songhongxu/blog/209951 一.内存溢出 ...

  3. java 大数据处理之内存溢出解决办法

    因项目中需要查询大量数据,所以导致jvm内存溢出,发现这篇博文不错,转发来共同学习 原文地址:https://www.cnblogs.com/a757956132/p/4644910.html 一.内 ...

  4. Junit 测试时内存溢出解决办法

    今天在写Junit测试时出现java.lang.OutOfMemory错误,原因:由于启动测试是要加载的xml配置文件过多,导致内存溢出.解决方法如下:选中测试文件,右键Run as --->R ...

  5. ant-design-pro使用umi build打包内存溢出解决办法

    1.内存溢出错误提示 FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript hea ...

  6. webpack构建时堆内存溢出解决办法

    今天使用yarn构建umi项目时,遇到了Javascript heap out of memory的问题,表明是构建过程中堆内存溢出. 1.排查,尝试解决 首先,删除node_modules, yar ...

  7. java大文件下载内存溢出解决办法

    第一种解决办法内存够用的情况 启动时设置-Xmx的值大一点 比如2G. 第二种办法代码中使用缓冲流的方式,如果是本地文件就更好,如果是还需要再去文件服务器中下载一次也行. 例子: private vo ...

  8. java permgen space_PermGen space内存溢出解决办法

    服务启动后一段时间内,突然内存溢出:Exception in thread "main" java.lang.OutOfMemoryError: PermGen space 第一想 ...

  9. NodeJS内存溢出解决办法

    FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - nodeJs打包时内存溢出 打开一个cmd窗口 运 ...

最新文章

  1. Linux那些事儿 之 戏说USB(1)它从哪里来
  2. 豪取4个SOTA,谷歌魔改Transformer登NeurIPS 2021!一层8个token比1024个还好用
  3. 独家 | 115个A/B测试的分析结果︰平均提升为4%,大部分缺乏统计检定力
  4. MATLAB中floor、round、ceil、fix区别
  5. [CLPR] 定位算法探幽 - 边缘和形态学
  6. 类似QQ右上角选项弹框
  7. (百度、谷歌)地图经纬度gps偏移解决办法:gps纠偏数据库纠偏
  8. 关于FPGA核心bug解决
  9. vue 加载太慢_如何提高Vue项目首页的加载速度
  10. python bokeh slider_Bokeh数据可视化工具3视觉增强及服务器
  11. Process finished with exit code 0 报错解决方法
  12. windows c++ 流读取文件长度 ios::in ios::binary
  13. 清明假期,超市可重点主推的品类
  14. python+opencv 批量修改视频分辨率
  15. 72名图灵奖获得者的成就
  16. 前端小白Day6-仿照百度制作登录界面
  17. NodeVue安装记录启动项目(2020)
  18. SoundPool播放系统提示音
  19. 公众号扫描二维码(前端uniapp、后端java)
  20. 未来链上跨境支付、融资领域龙头 Tribal 的发展与机遇

热门文章

  1. 如何在Boxee中管理电影
  2. java.lang.IllegalStateException: No host
  3. mac格式化u盘ext3
  4. 要成为Web开发大师,你必须知道这7件事
  5. Cisco Nexus 7700 FEX双宿主割接踩坑经历
  6. 个人认为最佳模板制作方案
  7. 以太坊合并后的第一天,让我们来回顾一下 PoS 以太坊的设
  8. 2022四非计算机保研经验贴
  9. python+pyqt5实现RPG游戏角色生成器
  10. canvas学习——toDataURL()方法