2

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 );
    }                
});
4

1 に答える 1

1

ループで 150 個のイメージ オブジェクトを作成した後、2 ギガのメモリを取得しました。レンダリングプロセスの終了後にすべてに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;
于 2016-08-25T07:26:49.350 に答える