cc.textureCache.dumpCachedTextureInfo()输出的纹理内存就30M, 微信调试消息显示用了600M,1G的iphone手机直接就奔溃了,到底是微信问题还是这个函数有问题,还是有别的东西占内存,游戏内的音效不多,完全想不通了
微信调试模式显示的信息是不是把微信自己占用的内存也算在小游戏了???
调试信息里面的内存数据包含了微信小游戏的环境内存,你这边使用的creator版本是多少?
遇到同样的困惑:
项目内容没变:
1.9.2 内存峰值720MB (自己优化过CLEANUP_IMAGE_CACHE)
2.0.8 内存峰值 850MB
2.0.9 内存峰值 1050MB
现在本打算出个2.0.9 现在看来,不解决这个问题,没法发了。
你是哪个平台的问题?2.0.9 是否开启了 CLEANUP_IMAGE_CACHE ? 如果没有,纹理会一直缓存在内存。
微信小游戏,微信性能工具查看的。
CLEANUP_IMAGE_CACHE 在209不是默认打开的么?我没有修改过,控制出台查看该变量也是true
在game.js中creator自动生成的代码:
if (cc.sys.browserType === cc.sys.BROWSER_TYPE_WECHAT_GAME_SUB) {
var _WECHAT_SUBDOMAIN_DATA = require('src/subdomain.json.js');
cc.game.once(cc.game.EVENT_ENGINE_INITED, function () {
cc.Pipeline.Downloader.PackDownloader._doPreload("WECHAT_SUBDOMAIN", _WECHAT_SUBDOMAIN_DATA);
});
require('./libs/sub-context-adapter');
}
else {
// Release Image objects after uploaded gl texture
cc.macro.CLEANUP_IMAGE_CACHE = true;
}
另外,2.0移除了cc.textureCache,现在还有 dumpCachedTextureInfo 的替代方法么?
从哪里能看到用到的文理呢?
目前没有替代方法
刚才测试了一下,将 CLEANUP_IMAGE_CACHE 关掉,大概涨了300MB左右的内存,说明 CLEANUP_IMAGE_CACHE 的优化是有用的。
现在不知道为啥内存比前面的版本用的多。
当然之前的192时,微信用的是6.7版本,现在7.0.3
应该是GPU内存没有释放吧?一般是Texture2D这类对象,还有动态图集会用到的RenderTexture,可以跟踪下这两块的对象释放情况。
我研究一下。
研究发现,Texture2D 对象和实际的 图片数量基本一致,没发现什么问题。
倒是发现了另外一个高度可疑的泄露地方:
cocos2d\core\renderer\render-engine.js
这里面 的 IndexBuffer 和 VertexBuffer ,在场景加载,切换期间,它们的构造函数经常被调用到,但这2个类的 destroy 函数一次都没有调用过!
这意味着,所有的顶点缓冲对象和索引缓冲对象,在显存里面没有被释放掉,导致泄露。
请你们确认是否有这个问题。
我是用微信开发工具调试的。
Creator 2.0.9
赞一个 太细心了
似乎这些缓冲区并没有占用多少内存。我把它们释放后,内存占用并没有得到明显改善。
微信小游戏进入第一个界面,统计文理占用内存约90MB,可微信的性能数据面板显示 640MB 内存占用。这些内存被用在哪里了呢?
谁能证明微信统计是错误呢?
密切关注,总是感觉微信自己保存了一份图片解压后内存。
小游戏确实会不断生成纹理拷贝
