Я пишу приложение XUL, используя HTML Canvas для отображения растровых изображений.
Я генерирую ImageDatas и импортирую их на холст, используя функцию putImageData:
for(var pageIndex=0;pageIndex<100;pageIndex++){
this.img = imageDatas[pageIndex];
/* Create the Canvas element */
let imgCanvasTmp = document.createElementNS("http://www.w3.org/1999/xhtml",'html:canvas');
imgCanvasTmp.setAttribute('width', this.img.width);
imgCanvasTmp.setAttribute('height', this.img.height);
/* Import the image into the Canvas */
imgCanvasTmp.getContext('2d').putImageData(this.img, 0, 0);
/* Use the Canvas into another part of the program (Commented out for testing) */
// this.displayCanvas(imgCanvasTmp,pageIndex);
}
Изображения хорошо импортированы, но, похоже, произошла утечка памяти из-за функции putImageData.
При выходе из цикла «for» я ожидал, что память, выделенная для Canvas, будет освобождена, но, выполняя код без выполнения putImageData, я заметил, что моя программа в конце использует на 100 МБ меньше (мои изображения довольно большие ).
Я пришел к выводу, что функция putImageData предотвращает освобождение выделенной памяти сборщиком мусора.
Ты хоть представляешь, как заставить сборщик мусора освободить память? Есть ли способ очистить холст?
Я уже пытался удалить холст с помощью оператора delete или использовать функцию clearRect, но он ничего не сделал.
Я также пытался повторно использовать один и тот же холст для отображения изображения на каждой итерации, но объем используемой памяти не изменился, как если бы изображение было импортировано без удаления существующих ...