Unity频繁创建Texture造成内存溢出解决办法
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造成内存溢出解决办法相关推荐
- Tomcat内存溢出解决办法
工作中,Tomcat内存溢出遇到两次了,就在网上找了些资料,将解决办法分享一下: 使用Java程序从数据库中查询大量的数据时出现异常: java.lang.OutOfMemoryError: Ja ...
- java 大数据处理之内存溢出解决办法(一)
http://www.cnblogs.com/a757956132/p/4644910.html http://my.oschina.net/songhongxu/blog/209951 一.内存溢出 ...
- java 大数据处理之内存溢出解决办法
因项目中需要查询大量数据,所以导致jvm内存溢出,发现这篇博文不错,转发来共同学习 原文地址:https://www.cnblogs.com/a757956132/p/4644910.html 一.内 ...
- Junit 测试时内存溢出解决办法
今天在写Junit测试时出现java.lang.OutOfMemory错误,原因:由于启动测试是要加载的xml配置文件过多,导致内存溢出.解决方法如下:选中测试文件,右键Run as --->R ...
- ant-design-pro使用umi build打包内存溢出解决办法
1.内存溢出错误提示 FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript hea ...
- webpack构建时堆内存溢出解决办法
今天使用yarn构建umi项目时,遇到了Javascript heap out of memory的问题,表明是构建过程中堆内存溢出. 1.排查,尝试解决 首先,删除node_modules, yar ...
- java大文件下载内存溢出解决办法
第一种解决办法内存够用的情况 启动时设置-Xmx的值大一点 比如2G. 第二种办法代码中使用缓冲流的方式,如果是本地文件就更好,如果是还需要再去文件服务器中下载一次也行. 例子: private vo ...
- java permgen space_PermGen space内存溢出解决办法
服务启动后一段时间内,突然内存溢出:Exception in thread "main" java.lang.OutOfMemoryError: PermGen space 第一想 ...
- NodeJS内存溢出解决办法
FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - nodeJs打包时内存溢出 打开一个cmd窗口 运 ...
最新文章
- Linux那些事儿 之 戏说USB(1)它从哪里来
- 豪取4个SOTA,谷歌魔改Transformer登NeurIPS 2021!一层8个token比1024个还好用
- 独家 | 115个A/B测试的分析结果︰平均提升为4%,大部分缺乏统计检定力
- MATLAB中floor、round、ceil、fix区别
- [CLPR] 定位算法探幽 - 边缘和形态学
- 类似QQ右上角选项弹框
- (百度、谷歌)地图经纬度gps偏移解决办法:gps纠偏数据库纠偏
- 关于FPGA核心bug解决
- vue 加载太慢_如何提高Vue项目首页的加载速度
- python bokeh slider_Bokeh数据可视化工具3视觉增强及服务器
- Process finished with exit code 0 报错解决方法
- windows c++ 流读取文件长度 ios::in ios::binary
- 清明假期,超市可重点主推的品类
- python+opencv 批量修改视频分辨率
- 72名图灵奖获得者的成就
- 前端小白Day6-仿照百度制作登录界面
- NodeVue安装记录启动项目(2020)
- SoundPool播放系统提示音
- 公众号扫描二维码(前端uniapp、后端java)
- 未来链上跨境支付、融资领域龙头 Tribal 的发展与机遇