I would guess you are calling drawAChart more than one time, otherwise
there is no reason the memory would grow over time.  Are you keeping the
elementDIVs around after you are done with them?  Or is it the same element
every time?

If you do thrown the unused elements away, then there may still be memory
leaks involving event handling bound to those elements.  You can avoid some
leaks by clearing the chart that is associated with those elements.
 chart.clearChart() is what you want to call.  Ideally, this shouldn't be
necessary, but some browsers may still have issues with cleaning up the
unused elements, even when they are removed.

On Sat, Jan 28, 2017 at 7:42 PM, Slugsie <[email protected]> wrote:

> I'm pretty new to Javascript, and I'm trying to write a web page that
> displays the utilisation of our servers. I have it all working fine, except
> for the fact that over time the page consumes more and more memory, until
> eventually the browser just gives up and displays an out of memory error.
> If I disable the code that displays the graphs (it still collates the data,
> just doesn't display the resultant graphs) then memory usage stays pretty
> flat and well under control (typically under 25,000K - all memory stats
> taken from Chromes Task Manager). Add the graphs back in and it starts
> around 40,000K, but grows and grows. I've seen it reach nearly 1GB after
> many hours. The page is intended as a dashboard display, running all the
> time on a Smart TV, with the figures updated every minute.
>
>
>
> Here is the code that draws the graphs:
>
>
>
>       function drawAChart(dataSource, chartHead, elementDIV){
>               // // Take the data, and draw the actual graph
>               dataSource.unshift(chartHead);
>               var dataS = new 
> google.visualization.arrayToDataTable(dataSource);
>               var chartS = new 
> google.visualization.ColumnChart(document.getElementById(elementDIV));
>               chartS.draw(dataS, options);
>               // Try and clean up to help the GC
>               dataS = undefined;
>               chartS = undefined;
>               dataSource = undefined;
>       }
>
> When I comment out the lines relating to chartS then the memory usage
> stays low.
>
>
>
> dataSource is an array, typically in the form [['Server name',<%age number
> 0-100>,<colour>], ...]
>
> chartHead is typically ['Server','Useage', {role: 'style'}]
>
> elementDIV is just the name of the DIV that the graph is displayed in.
>
>
>
> The chart options are:
>
>       var options = {
>               height: 130,
>               legend: {
>                       position: 'none'
>               },
>               chartArea: {
>                       left: 50,
>                       top: 10,
>                       width: '95%',
>                       height: '75%'
>               },
>               vAxis: {
>                       viewWindow: {
>                               min: 0,
>                               max: 100
>                       },
>                       ticks: [{v:0, f:"0%"}, {v:25, f:"25%"}, {v:50, 
> f:"50%"}, {v:75, f:"75%"}, {v:100, f:"100%"}]
>               },
>               bar: {
>                       groupWidth: '95%'
>               }
>       };
>
>
>
> I know I'm missing something, probably obvious to any seasoned Javascript
> devs, but I just can't figure it out. Hopefully I've given enough info for
> someone to point me in the right direction.
>
> --
> You received this message because you are subscribed to the Google Groups
> "Google Visualization API" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to google-visualization-api@
> googlegroups.com.
> Visit this group at https://groups.google.com/
> group/google-visualization-api.
> To view this discussion on the web visit https://groups.google.com/d/
> msgid/google-visualization-api/476a7e9d-5afa-49fb-a64c-
> 160454d42ca3%40googlegroups.com
> <https://groups.google.com/d/msgid/google-visualization-api/476a7e9d-5afa-49fb-a64c-160454d42ca3%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>



-- 
Daniel LaLiberte <https://plus.google.com/100631381223468223275?prsrc=2>
[email protected] <[email protected]>   5CC, Cambridge MA

-- 
You received this message because you are subscribed to the Google Groups 
"Google Visualization API" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/google-visualization-api.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-visualization-api/CAOtcSJPPwDHbTQVZQR%3DC7jhNwC9%2B89JBrwGugVNPh3o497QUGw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to