Zing Chart内存泄漏,导致浏览器崩溃

时间:2012-03-22 18:02:47

标签: memory-leaks

我们目前正在浏览器窗口上渲染50-100画布。浏览器IE和Chrome崩溃。 在进一步调查中,看起来像记忆正在稳步上升。导致浏览器崩溃。

我们正在构建打印图表的解决方案为实现这一目标,

  1. 我们在一个简单的页面(iframe)图表中显示所有图表对用户不可见
  2. 使用图表ID获取图像数据。
  3. 由于图表不可见,我们可以在渲染后“销毁”或将其从内存中删除。
  4. 但'destroy'不会减少图表内存占用
  5. 尝试将对象设置为null。这不起作用
  6. 附件摘录供您参考,

    var runner = 0
    zingchart.complete = function (dataObj) {
        for (i = 0; i < ZingChartCollection.length; i++) {
            if (dataObj["id"] == ZingChartCollection[i].ChartId) {
                var data = zingchart.exec(dataObj["id"], "getimagedata", '{"filetype": "png"}');
                zingchart.exec(dataObj["id"], 'destroy');
                zingchart.exec();
                if (runner < 200) {
                    document.getElementById("displayCount").value = runner;
                    render();
                }
                else {
                    //zingchart = null;
                }
                runner++;
            }
        }
    }
    

    任何建议都会很棒。

1 个答案:

答案 0 :(得分:0)

以下是关于ZinChart开发团队问题的说明:


这里的问题是render() - &gt;完成事件 - &gt;图像生成 - &gt; destroy()是一个闭环。

ZingChart lib的工作方式,为了尽快触发完成,代码在完成触发后绑定了​​上下文菜单事件。 因此,由于立即调用destroy,上下文菜单事件被打开,并且开始添加50-100个图表,导致内存泄漏。

这将改变&amp;固定在下一个版本中,以便在上下文菜单设置后触发完整事件,但是,使用当前设置,有两个选项:

  1. 使用mode:static on render(),因为我们的想法是将静态图像从图表中取出。这会跳过事件绑定,因此内存泄漏将不再是问题。 此外,由于将使用较少的画布对象,这将大大减少每个图表所需的内存。

  2. 如果您需要图表的完整功能(虽然在这种特殊情况下不需要),请通过setTimeout调用延迟函数中的destroy()。这将允许 对于要设置的上下文菜单事件,destroy()也将取消绑定它们。