项目中存在内存泄漏的源头是:调用底层c++接口,获取buffer数据(一帧一帧的图片数据),将buffer数据使用cavans进行渲染,发现只要调用c++的接口,在任务管理器中就会看到项目的内存一直再增加。
经c++同事指点,获取他们的数据格式为{width:1280,height:720,data:buffer,retual:true},其中buffer数据不受node垃圾回收机制的限制,需要手动清除。
修改前:将整个数据传给前端页面进行渲染
this.sendDataToPage(info)
修改后:将获取的c++数据中data(不受node层控制)清除掉,重新赋值给一个变量。新定义的变量受node层控制,可回收
let info={width:1280,height:720,data:buffer,retual:true}
if(info.data){
let bufferData=Buffer.from(info.data)
info.data=null
this.sendDataToPage({...info,data:bufferData})
}
项目由于调用C++接口获取图片数据并使用canvas渲染,导致内存持续增加。经分析,buffer数据不被Node.js的垃圾回收机制处理,需手动清理。修改前直接将包含buffer的数据传递给前端。修改后,清除原始buffer,将其复制到一个新的Buffer对象,原数据设为null,然后发送处理后的数据,确保内存可回收。
919

被折叠的 条评论
为什么被折叠?



