我想用 Dart 做一些图像处理,同时使用 requestAnimationFrame 不断更新我正在处理的图像。以下代码将泄漏内存,直到选项卡在 Dartium 中崩溃。
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 更新。这个内存泄漏是当前飞镖实现中的一个错误还是我做错了什么?