2
我想用Dart做一些圖像處理,同時使用requestAnimationFrame來不斷更新我正在處理的圖像。下面的代碼會泄漏內存,直到Dartium中的選項卡崩潰。爲什麼使用getImageData泄漏內存
import 'dart:html';
import 'dart:async';
final CanvasElement m_canvas = querySelector("#canvas");
void main() {
scheduleMicrotask(requestRedraw);
}
void requestRedraw() {
if(true)
{
window.requestAnimationFrame(draw);
}
}
void draw(num _) {
var context = m_canvas.context2D;
context.clearRect(0, 0, m_canvas.width, m_canvas.height);
var imageData = context.getImageData(0, 0, m_canvas.width, m_canvas.height);
requestRedraw();
}
imageData var在每次繪製調用完成後顯然已超出範圍,但它保留的內存永遠不會釋放。註釋掉這一行會導致代碼正常運行,並以60 fps更新。這個內存泄漏了當前dart實現中的錯誤還是我做錯了什麼?
不知道爲什麼,但似乎Dartium和/或飛鏢VM沒有按」運行垃圾收集器。當使用dart2js並在Firefox中運行它時,我可以像預期的那樣觀察內存使用情況。所以不,看起來不像你做錯了什麼。 – MarioP