Google Chart Ständige Neuzeichnen Speicher Erhöhen
Ich bin Neuzeichnen des Diagramms auf der Grundlage neuer Daten jede Sekunde, und es funktioniert und sieht toll aus, aber ich merke, es erhöhe ich den Speicher von 1 MB Nutzung pro Sekunde. Irgendeine Möglichkeit dieses Problem zu beheben? Ich merke, wenn ich nur noch statischen Diagramme, dann ist der Speicher stabilisiert, aber sobald ich hinzufügen, die ständige Neuzeichnen (um die Daten zu aktualisieren), die Speicherauslastung nie aufhört.
Zuerst dachte ich, es war, weil ich eine neue Instanz zu erstellen das Diagramm jedes mal, also habe ich den code ändern so war es nur Neuzeichnen der gleichen Instanz jeder Zeit, aber das half nicht viel.
Weiss jemand wie man es beheben? Muss ich einen dump der alten Grafik zuerst irgendwie?
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)
- Der Speicherverlust auf redraw-Problem ist bekannt. Es gibt nichts, was Sie dagegen tun können wie weit ich bin bewusst. Die Visualisierungs-API-dev-team weiß es und schaut hinein.
- Hast du irgendwelche Quellen dafür? Das scheint wirklich seltsam, es ziemlich viel bedeutet, Sie können nicht aktualisieren Sie die Daten in die Diagramme dann.
- Zur info, der neueste release candidate-version (Last v1.1 statt v1) enthält einige fixes für die memory-leak-Probleme.
- Ich habe versucht für zwei Tage nun verschiedene Wege daran vorbei, aber nichts funktioniert. Unter vielen Dingen, die ich habe versucht, löschen Sie das ganze mit div (mit dem besten Ergebnis, obwohl der abt. 400 kB Leck/update). @Alex-Lösung nichts tun. Wie macht man das laden der v1.1, @asgallant?
- Wenn Sie anrufen
google.load('visualization', '1', {packages: [/* packages list */], callback: drawChart});
ersetzen Sie die1
mit1.1
. - Ok, vielen Dank! 1.1 das Leck (falls vorhanden) ist zu vernachlässigen. Insgesamt ist der Verbrauch höher, obwohl (~15MB von ~7MB). Funktioniert auf pc aber sehr träge auf dem Raspberry Pi (eine andere Geschichte :-). Sollten Sie überlegen, 1.1, eine gute Antwort zu dieser Frage!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich dies Problem gelöst, indem globaly speichern Sie das Diagramm. Vor dem zeichnen der Grafik, die Sie brauchen, um zu prüfen, ob chart instanziiert wurde. Wenn nicht, erstellen Sie die neue Diagramm-Objekt sonst nennen clearChart() Methode vor dem zeichnen zu. Wie diese:
Hatte dasselbe Problem, konnte es beheben, indem Sie ein paar Zeilen von Google clearChart () - Funktion.
Mehr Details:
https://www.google.com/uds/api/visualization/1.0/4086f2e8fc632adc52e6d6795a5637a4/format+en,default,corechart.I.js
Laden Sie diese Datei herunter, machen die erwähnten Veränderungen. In Ihrem code, fügen Sie ein script-tag nicht für das laden über Datei vom webserver und kommentieren Sie die folgende Zeile:
//google.load('visualization', '1', { packages: ['corechart'] });
Den Speicher gehen, sondern kommen wieder nach unten auf seine eigene nach ein paar Minuten.
Ich bin mit clearChart (), aber wenn Sie nicht möchten, deaktivieren Sie das Diagramm, dann erstellen Sie Ihre eigenen Funktion (z.B. memoryLeakFix()) und rufen Sie in regelmäßigen Abständen.
Hier ist eine test-Seite (die 1.js ist die geänderte Datei aus Schritt 1). Es schafft im Grunde neues Diagramm und zeichnet jede 100ms. Sehen Sie den Speicher gehen, aber drücken Sie "Stop" link zum beenden der Neuzeichnung und warten Sie einige Minuten, und der Speicher wird nach unten kommen.