Ich schreibe eine XUL-Anwendung mit HTML Canvas, um Bitmap-Bilder anzuzeigen. Ich Erzeugung ImageDatas und sie in einer Leinwand Import der putImageData Funktion:Befreien von ImageData beim Löschen eines Canvas
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);
}
Die Bilder sind gut eingeführt, aber es scheint aufgrund der putImageData Funktion ein Speicherverlust zu sein.
Beim Verlassen der "for" -Schleife würde ich erwarten, dass der für Canvas freigegebene Speicher freigegeben wird, aber durch Ausführen des Codes ohne putImageData habe ich festgestellt, dass mein Programm am Ende 100Mb weniger verwendet (meine Bilder sind ziemlich) groß).
Ich kam zu der Schlussfolgerung, dass die PutImageData-Funktion verhindert, dass der Garbage Collector den zugewiesenen Speicher freigibt.
Haben Sie eine Idee, wie ich den Müllsammler zwingen könnte, den Speicher freizugeben? Gibt es eine Möglichkeit, den Canvas zu leeren?
Ich habe bereits versucht, die Leinwand mit dem Löschen-Operator zu löschen oder die clearRect-Funktion zu verwenden, aber es hat nichts getan.
Ich habe auch versucht die gleiche Leinwand wieder zu verwenden bei jeder Iteration, aber die Größe des Speichers zur Anzeige des Bildes nicht geändert genutzt, als ob das Bild, wo zu löschen, ohne die bestehenden importiert ...
[This] (https://developer.mozilla.org/en/debugging_memory_leaks) kann helfen –