【发布时间】:2013-12-17 21:44:05
【问题描述】:
我想用 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 更新。这个内存泄漏是当前飞镖实现中的一个错误还是我做错了什么?
【问题讨论】:
-
不知道为什么,但似乎 Dartium 和/或 Dart VM 没有运行垃圾收集器。当使用 dart2js 并在 Firefox 中运行它时,我可以观察到内存使用率的上升和下降,正如预期的那样。所以不,看起来你做错了什么。
标签: memory-leaks dart dartium