Существует ли успешный метод уничтожения экземпляров Buffer и освобождения памяти, используемой в NodeJS Canvas?
Пробовал многочисленные способы заставить GC очистить память без успеха. Более того:
buf.remove(); // does not exist
delete buf; // does not deallocate the memory
buf = null; // removing references - no result
Проблема возникает в этой процедуре:
function loadImage(url, finish){
var Image = Canvas.Image;
request.get({url:url, encoding:null}, responseImage);
function responseImage(err,res,body) {
if(err){
return finish();
}
var image = new Image();
image.onerror = function(e) {
finish();
};
image.onload = function(){
finish(image);
};
image.src = new Buffer(body, 'binary');
}
}
loadImage("http://...", function(image){
if(image){
canvasContext.drawImage(image,0,0,100,100 );
}
});
1 ответ
Я получил 2 гигабайта памяти после того, как цикл создал 150 объектов изображений. даже присвоить ему значение null после завершения процесса рендеринга все равно дал мне тот же результат утечки памяти. поэтому я покопался в image.cc и обнаружил, что решение простое. Просто переназначьте источник изображения на null, объект изображения очистится сам, после чего я верну себе память:) (это может вызвать событие onerror, потому что изображение загружается ни с чем)
var img = new Image;
img.onload = function() {
//do anything you want ...
//clean it by change src to null
img.src = null;
};
img.src = data;