文档章节

微信小游戏内存优化之填坑篇

ForeverZI
 ForeverZI
发布于 01/14 21:15
字数 697
阅读 17
收藏 0

最近一直被小游戏的内存搞得筋疲力尽,今天总算结束了... 现在来总结下我遇到的一些坑

首先,我们复习下creator的内存回收机制

  • 凡是静态资源(不在resources目录中的)都可以再勾选场景的自动释放资源在场景结束后自动释放
  • 凡是动态加载的资源都不会自动释放,需要手动调用cc.loader.release去释放

第一个坑,cc.loader.getDependsRecursively

官方文档在这里,里面有句话你一不小心可能会出大问题。就是获取某个已经加载好的资源的所有依赖资源,是的,如果你直接使用一个prefab去调用这个方法你可能只能得到prefab的resid。同样,如果你在prefab实例的onDestroy中调用这个方法,依然只会返回prefab的resid,因为其依赖的实例的children都已经被销毁了(我猜)。 所以正确的处理方式应该是:

onLoad(){
	this._deps = cc.loader.getDependsRecursively(this.getAsset())
}

onDestroy(){
	cc.loader.release(this._deps)
}

第二个坑,cc.loader.load

如果你用这个方法来加载远程图片资源的话,直接使用cc.loader.release释放的话是不会成功的,控制台这时会出现一个警告:

unknow asset type cc_SpriteFrame

这个警告的意思是你所要释放的贴图还被一个SpriteFrame所引用,因此你需要在释放资源之前移除这个spriteFrame的引用,代码如下

	node.getComponent(cc.Sprite).spriteFrame = null;
	cc.loader.release(remoteUrl);

第三个坑,cc.loader.release

在弄完前面两个步骤之后你可能会觉得事情还是很简单的嘛。这时候你开始测量你的内存了,首页,内存控制得不错,第二个场景,为什么内存增加了... 一直到最后,你会发现内存不停增长,完全不会下降。这是怎么回事呢?cc.loader.release会首先移除贴图的显存,内存还是它的cache里面(?不明白为什么),因此你需要在此时手动释放贴图资源占用的内存,在微信小游戏中释放一个贴图很简单:img.src= "",因此我们只要拿到贴图内部的微信image对象就好办了,代码如下:

const item = cc.loader.getRes(id);
if(item instanceof cc.Texture2D){
	item.getHtmlElementObj() && (item.getHtmlElementObj().src = '');
}
cc.loader.release(id);

开发环境:cocos creator 1.9.3

大功告成,希望大家不要再在内存上面踩坑,按时上下班😂

© 著作权归作者所有

共有 人打赏支持
ForeverZI
粉丝 0
博文 12
码字总数 6788
作品 0
杭州
私信 提问
Unity优化百科(UWA 博客目录)

原文链接:https://blog.uwa4d.com/archives/Index.html Hello, 各位Unity开发者,无论您是正用着UWA的工具、还是阅读着UWA的相关技术文章亦或是在UWA博客中寻找一个问题的解答,我们都倍感荣...

UWA4D
2017/10/26
0
0
2017微信数据报告:日活跃用户达9亿、日发消息380亿条

1、引言 2017年11月9日,微信团队在成都腾讯全球合作伙伴大会上为全球伙伴解读了最新的《2017微信数据报告》。微信每天有多少条消息被发送?目前有多少个行业已经在使用小程序了?答案尽在其...

JackJiang2011
2017/11/09
0
0
2017 我所分享的技术文章总结(下)

> 对下半年所分享的文章进行整理,上半年总结的 98 篇好文请点击这里,很多读者当时忘记了收藏,以致于查找一篇历史文章很费劲,因此在这里顺便做下记录。目前就分下下面几个大类,没有更多细...

你未读
2018/01/01
0
0
2017微信数据报告:日活跃用户达9亿、日发消息380亿条

1、引言 2017年11月9日,微信团队在成都腾讯全球合作伙伴大会上为全球伙伴解读了最新的《2017微信数据报告》。微信每天有多少条消息被发送?目前有多少个行业已经在使用小程序了?答案尽在其...

JackJiang-
2017/11/09
0
0
微信Android客户端架构演进之路

去年7月,笔者在InfoQ举办的ArchSummit深圳2014的架构师峰会上,分享了微信Android客户端的架构演进史。可以说,这是一个典型的Android应用在从小到大的成长过程中的“踩坑”与“填坑”的历史...

浮躁的码农
2018/05/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

看过上百部片子的这个人教你视频标签算法解析

本文由云+社区发表 随着内容时代的来临,多媒体信息,特别是视频信息的分析和理解需求,如图像分类、图像打标签、视频处理等等,变得越发迫切。目前图像分类已经发展了多年,在一定条件下已经...

腾讯云加社区
35分钟前
2
0
2. 红黑树

定义:红黑树(Red-Black Tree,简称R-B Tree),它一种特殊的二叉查找树(Binary Search Tree)。 要理解红黑树,先要了解什么是二叉查找树。在上一章中,我们学习了什么是二叉树,以及二叉树...

火拳-艾斯
36分钟前
2
0
input的button类型,点击页面跳转

一、input type=button 不做任何操作 例如: <input type="button" class="btn btn-primary" style="width: 30%" value="返回" onclick="window.location.href='/users/list'"></input> onc......

Sunki
42分钟前
1
0
踩坑:js 小数运算出现精度问题

背景 在学习小程序商城源码时发现了这个问题,单价可能出现小数,小数之间运算结果会莫名其妙多出一大串数字,比如下面这样👇。 在此之前我是知道 js 中著名的 0.1 + 0.2 != 0.3 的问题的,...

dkvirus
48分钟前
2
0
zookeeper和HBASE总结

zookeeper快速上手 zookeeper的基本功能和应用场景 zookeeper的整体运行机制 zookeeper的数据存储机制 数据存储形式 zookeeper中对用户的数据采用kv形式存储 只是zk有点特别: key:是以路径...

瑞查德-Jack
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部