Pre loader

WPF x:Name Memory Leak / How to Clear Memory in SciChart


WPF x:Name Memory Leak / How to Clear Memory in SciChart

Today a customer of SciChart asked us how to clear memory in SciChart. They were experiencing a memory leak, after adding 30,000,000 points to a SciChartSurface then removing the chart from its parent Grid, the memory usage in Task Manager just wouldn’t go down.

We take Memory leaks very seriously so devoted some time to diagnosing the problem. We found something in the WPF framework which really shocked us. Take a look at the following video, we think you’ll be surprised too!

Wow, so x:Name MarkupExtension in WPF actually keeps a reference to any UserControl or element named in XAML, even if it is removed from the Visual Tree. We’ve been coding WPF since the Cider Extensions to Visual Studio 2005, and never knew about this!

That’s not to say SciChart is perfect in this regard. We found another issue where if you clear the RenderableSeries after removing a surface, the XValues are kept in memory by the Axis Interactivity Helper.For a surefire way to ensure memory is freed, you can always clear the DataSeries like this:

// Ensure all DataSeries are cleared
((XyDataSeries<DateTime, double>)this.sciChartSurface.RenderableSeries[0].DataSeries).Clear();

So, if you get a memory leak in SciChart and clearing the DataSeries does not work, it’s worth running it against a profiler and seeing what the GC Roots are. If you see a tree like the above it could be because of the x:Name Markup Extension!

By Andrew Burnett-Thompson | May 29, 2014
CEO / Founder of SciChart. Masters (MEng) and PhD in Electronics & Signal Processing.Follow me on LinkedIn for more SciChart content, or twitter at @drandrewbt.

Leave a Reply

Try SciChart Today

Start a trial and discover why we are the choice
of demanding developers worldwide

Start TrialCase Studies