【发布时间】:2011-09-25 23:34:45
【问题描述】:
我似乎有内存泄漏,这是由于在 javascript 脚本中使用“new Image()”引起的。如果我在 Windows 资源监视器中查看使用的物理内存,我会在加载页面时得到预期的内存使用增加,因为它使用如下方式加载了一些相当大的图像:
var imgObjs = [];
// in for loop i = 0, 1, 2...
imgObjs[i] = new Image();
imgObjs[i].onload = function(event) {
// image loaded
}
imgObjs[this.img_src].src = this.img_src;
我会认为当页面导航离开时会自动破坏引用并释放内存,但情况似乎并非如此。取而代之的是,我离开然后返回页面,发现内存增加得更多,因为它再次加载图像而没有释放先前分配的内存。我尝试通过将代码放入 unload 事件中来手动删除引用,但它似乎没有任何区别。这些变量最初都是用'var'声明的:
// allow garbage collection by removing references
$(window).unload(function() {
for(var i in imgObjs) {
imgObjs[i] = null;
delete imgObjs[i];
}
delete imgObjs
// delete other variables that reference the images
});
有没有人知道我在哪里出错了?我认为问题可能与循环引用有关,因为我已经构建了一个列表类,其中每个项目都包含对上一张和下一张图像的引用,但我将这些内容如下:
delete galleries[i].pictures.Items[j].prev;
delete galleries[i].pictures.Items[j].next;
【问题讨论】:
-
您已经在这里提出了五个关于 SO 的问题,但从未接受过一个作为最佳答案。请解决这个问题,否则人们会开始忽略您的问题。
-
没有意识到它是如何工作的。我现在就这样做。
标签: javascript memory-leaks image