【发布时间】:2013-11-19 23:39:40
【问题描述】:
我编写了一个“幻灯片放映”,它可以按顺序快速显示图像,就像定格电影一样。
一旦显示图像,我将不再使用它,我想将其从内存中清除,以便为新图像腾出空间。但是,在 Activity Monitor 中监控 Google Chrome Helper 时,我看到内存持续稳定增加,直到浏览器崩溃。
我注意到a chrome garbage collection issue 是作为错误提交的,我想知道我是否遇到了这种情况?
否则,这是我尝试基于this post 让 Chrome 丢弃我的旧图像数据的一个技巧示例。
function ClearChunk()
{
imageSet1 = null; // garbage collect please?
imageSet1 = [];
}
function LoadNewChunk()
{
for (i=start_of_chunk;i<end_of_chunk;i++)
{
imageSet1[i-start_of_chunk] = new Image();
imageSet1[i-start_of_chunk].src = img[i];
}
}
这首先清除,然后在后台加载,同时显示另一组图像。这在当时似乎是个好主意,但在我的机器上它仍然稳定地攀升到大约 3Gb 并且...... 哦,Snap。
首先如何缓解这种猖獗的内存消耗?
我们将不胜感激任何对话或基于代码的反馈。
【问题讨论】:
-
你在很短的时间内使用了大量的图像,垃圾收集只会偶尔出现,而不是每次你问的时候。尝试避免执行“= new Image()” 999999 次并找到一种仅更改 src 的方法。
-
虽然你根本不能要求 JS 做 GC.. 这是一个纯粹的内部机制,清空一个值并不能保证 GC。
-
只是为了确定,因为你没有提到它:你是否确保没有一个对象保留你的图像的引用(一个数组,一个 DOM 对象,......????) .因为这是首先要检查的。
-
我已经尝试过更多的尝试,到目前为止,对我来说最好的解决方案是使用更少的图像;)我确定我已经在某处保留了参考......我会如果我有任何启发,请更新。
标签: javascript image google-chrome canvas memory-leaks