【发布时间】:2014-08-02 20:53:39
【问题描述】:
我每秒都会根据新数据重新绘制图表,它工作得很好并且看起来很棒,但我注意到它会增加内存,例如每秒 1 MB 的使用量。有任何解决这个问题的方法吗?我注意到如果我只有静态图表,那么内存就会稳定下来,但是一旦我添加了不断重绘(为了更新数据),内存使用就永远不会停止。
起初我以为是因为我每次都在创建一个新的图表实例,所以我更改了代码,所以每次只重绘同一个实例,但这并没有太大帮助。
有人知道怎么解决吗?我需要先以某种方式转储旧图表吗?
google.setOnLoadCallback(test);
var chart;
var chartOptions;
var chartCreate;
function test() {
chart = new google.visualization.DataTable();
chart.addColumn('string', 'Lorem');
chart.addColumn('number', 'Ipsum');
chart.addRows([
['', 0]
]);
chartOptions = {};
chartCreate = new google.visualization.LineChart(document.getElementById('chartDiv'));
chartCreate.draw(chart, chartOptions);
]);
}
function test2() {
chart.removeRows(0, 5);
for (var i = 0; i < dataSpaceArray.length; ++i) {
chart.addRow([dataTimeArray[i], dataSpaceArray[i], dataSpeedArray[i]]);
}
chartCreate.draw(chart, chartOptions);
}
setTimeout(test2,1000)
【问题讨论】:
-
重绘时的内存泄漏是一个已知问题。据我所知,您对此无能为力。可视化 API 开发团队知道并正在研究它。
-
你有这方面的资料吗?这看起来很奇怪,这几乎意味着您无法更新图表中的数据。
-
仅供参考,最新的候选发布版本(加载 v1.1 而不是 v1)包含一些内存泄漏问题的修复。
-
调用
google.load('visualization', '1', {packages: [/* packages list */], callback: drawChart});时,将1替换为1.1。 -
好的,谢谢!对于 1.1,泄漏(如果有)可以忽略不计。不过总体消耗更高(从 ~7MB 到 ~15MB)。在 pc 上工作,但在 Raspberry Pi 上非常缓慢(另一个故事:-)。你应该认为 1.1 是这个问题的一个很好的答案!
标签: javascript google-visualization