调用sp.spriteFrame = SpriteFrame.createWithImage(imgAsset); 内存一直涨
用网页谷■跑Google Chrome Helper (GPU) 一直增高
用creator跑CocosCreator Helper(GPU) 一直增高
确认只要sp.spriteFrame = SpriteFrame.createWithImage(imgAsset); 注掉就正常了,一create内存涨了就清不掉

没换几个图几分钟内存80G了
调用sp.spriteFrame = SpriteFrame.createWithImage(imgAsset); 内存一直涨
用网页谷■跑Google Chrome Helper (GPU) 一直增高
用creator跑CocosCreator Helper(GPU) 一直增高
确认只要sp.spriteFrame = SpriteFrame.createWithImage(imgAsset); 注掉就正常了,一create内存涨了就清不掉

没换几个图几分钟内存80G了
顶帖,我也发现了,@官方
public static createWithImage (imageSourceOrImageAsset: ImageSource | ImageAsset): SpriteFrame { const img = imageSourceOrImageAsset instanceof ImageAsset ? imageSourceOrImageAsset : new ImageAsset(imageSourceOrImageAsset); const tex = new Texture2D(); tex.image = img; const spf = new SpriteFrame(); spf.texture = tex; return spf;}
使用完之后自己释放下tex呗……
试了 确实是如果不停动态加载,上一次动态创建的texture无法释放
测试sp.spriteFrame = null似乎没用
DDDDDDDDDdddddD顶顶顶顶
试试看在重新赋值前 拿到上一个spriteFrame的tex 并把tex释放const spf = sp.spriteFrame; sp.spriteFrame = null; const tex = spf.texture; tex.destroy();
图片不显示了。。
这正常呀, 你手动创建纹理,又不走cc.assetManager.assets.get/set 进行缓存与取缓存, 直接不断建texture然后texture.image = ImageAsset 等于webgl不断重复创建纹理, 内存一定是会一直涨的。 估计官方提供这个接口只是为了用来做些简单逻辑, 需要缓存要靠自己
老哥怎么卸掉之前动态创建的呀,老版cocos-js跟unity没写自己删除都是自动管理的,他官方应该在createWithImage是检查之前的没用就该释放掉的吧?
顶顶顶顶顶顶顶顶
尝试半天没写出来
顶呱呱顶呱呱
今天测试把console.log 跟console.error屏蔽掉就好
目前看是log太多的锅
还是不行呀,再家里测试新项目好的,公司环境去掉log换图还是一直涨,难道有什么引擎配置不同造成的? 
我记得动态加载第三方图片挺危险的,比如头像啥的,如果没释放好,内存就泄露了 
目前是bundle内的本地图
一张图片加载成功后存到一个map里面去,下次用到的时候先从map里面取,这样就不会无限上涨了
import { _decorator, Component, Node, resources, ImageAsset } from ‘cc’;
import * as cc from ‘cc’;
const { ccclass, property } = _decorator;@ccclass(‘changeImageTest’)
export class changeImageTest extends Component {
isStop = false;
start() {cc.input.on(cc.Input.EventType.KEY_DOWN,(event: cc.EventKeyboard)=>{ switch (event.keyCode) { case cc.KeyCode.KEY_A: this.isStop = true; break; default: this.isStop = false; break; } }, this); } update(deltaTime: number) { if(this.isStop){ return } for (let i = 0; i < 100; i++) { resources.load("testImage" + 1, ImageAsset, (err, asset) => { this.getComponent(cc.Sprite).getComponent(cc.Sprite).spriteFrame = cc.SpriteFrame.createWithImage(asset); }); } }}
写了个小demo