2014-12-02 737 views
0

嘗試了很多方法來強制GC清除內存而沒有成功。 最重要的是:是否有成功的方法銷燬Buffer實例並釋放NodeJS Canvas中使用的內存?

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

你是什麼意思「沒有成功」?你能告訴更多關於你如何測試的內容嗎? – 2014-12-02 15:29:08

+0

我有一個小功能,可以將來自URL的圖像加載到緩衝區中。在畫布上繪製圖像對象後,我嘗試銷燬圖像對象並釋放緩衝區內存。 – swogger 2014-12-02 15:33:20

+0

你如何跟蹤內存堆? – Shmiddty 2014-12-02 15:40:05

回答

0

我得到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; 
相關問題