在我的项目中,我有一个angular工厂,它将照顾与c++应用程序的websocket连接。
websocket工厂结构:
.factory('SocketFactory', function ($rootScope) {
var factory = {};
factory.connect = function () {
if(factory.ws) { return; }
var ws = new WebSocket('ws://...');
ws.onopen = function () {
console.log('Connection to the App established');
};
ws.onerror = function () {
console.log('Failed to established the connection to the App');
};
ws.onclose = function () {
console.log('Connection to the App closed');
};
ws.onmessage = function (message) {
//do stuff here
};
factory.ws = ws;
};
factory.send = function (msg) {
if(!factory.ws){ return; }
if(factory.ws.readyState === 1) {
factory.ws.send(JSON.stringify(msg));
}
};
return factory;
});
c++应用程序将通过websockets发送图像,它们将显示在画布中,每次收到新图像时都会更新。
一切都很好,但是当我开始向浏览器发送图像时,我注意到在ubuntu的系统资源监视器中,每次ws.onMessage
被触发时,chrome进程使用的内存不断增加+/-5mb(大约)。
我注释了ws.onMessage
内部的代码,只留下事件检测,没有其他任何内容,使用的内存仍然增加,如果我注释整个ws.onMessage
事件,使用的内存保持在正常范围内。
$destroy
来防止这种循环吗? 结果比我想象的更令人困惑。
首先,我没有使用上面所示的websocket服务,而是使用了这个:https://github.com/gdi2290/angular-websocket内存泄漏仍然存在,但我注意到,在画布更新过程中,有一个对imageObj.src
的引用没有被垃圾收集。
Chrome, opera和firefox现在似乎将已使用内存保持在合理的范围内。