将许多新图像绘制到画布时内存泄漏

memory leak while drawing many new images to canvas

本文关键字:布时 内存 泄漏 许多新 图像 绘制      更新时间:2023-09-26

我写了一个"幻灯片",可以按顺序快速显示图像,就像定格电影一样。

一旦显示图像,我就没有进一步的用途了,并希望将其从内存中清除以释放新图像的空间。但是,在活动监视器中监视Google Chrome助手时,我看到内存继续稳步增加,直到浏览器崩溃。

注意到一个作为错误提交的chrome垃圾收集问题,我想知道我是否遇到了这个问题?

否则,这是我根据这篇文章尝试的技巧的一个示例,以使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 并且......噢,啪。

首先如何减轻这种猖獗的内存消耗?

任何对话或基于代码的反馈将不胜感激。

尝试只做一个"new Image()",并重用它,而不是在循环中创建许多。 这帮助我解决了同样的问题。

webworkers ? 也许?

====

==========

最近看到了一些关于....如果您声明一个变量,例如...

变量温度 = 0;

而不是实际声明变量。 而只是给它分配一些东西。

var tempa = 0;//不要做

temp_no_var = 0;//有某种"删除"功能可以从内存中删除变量,或者更确切地说是减少内存空间。

也许在使用图像后,只需将其同化为 null 或 0.与将图像数据保留在变量中并希望等待垃圾回收。

==================

重用变量,而不是制作不断增长和增长的巨大数组。

==================

查看ImageMagik并了解如何创建" GIF"动画图片。如果影片剪辑 errr 图像集中的信息不会更改。