Существует ли успешный метод уничтожения экземпляров 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;
Другие вопросы по тегам