Silverlight Toolkit图表组件中可能存在内存泄漏 - 帮助!

时间:2010-07-01 15:53:55

标签: c# silverlight memory-leaks charts

背景:

我一直在监控应用程序中使用2009年11月发布的Silverlight Toolkit Charting组件,该应用程序每10秒左右更新一次折线图。

每个图表都绑定到ObservableCollection。 DataValuePair是仅包含两个属性(DateTime和int)的简单类。每次向集合添加DataValuePair时,都会删除已经过某个时间点的项目(即每个集合中始终有< 50个DataValuePair对象)。

问题:

记忆力不断上升。在WinDbg中,我可以看到DataValuePair对象(甚至是已从ObservableCollections中删除的对象)仍在堆中,并且由图表组件的某些元素引用。

我的应用程序代码中没有对象的其他引用,并且通过.Remove(item)从ObservableCollections中删除对象。我认为这些将被GC删除。

任何人都可以看到我在某处出错或者这是图表组件的问题吗?

干杯! 克里斯

2 个答案:

答案 0 :(得分:2)

是的,经过两天的努力,我似乎​​已经解决了这个问题!

似乎内存泄漏是由LineDataPoints上的样式引起的,我已经改变了这一点:

<Style x:Key="SparklineDataPointStyle" TargetType="charting:LineDataPoint">
    <Setter Property="Template" Value="{x:Null}" />
    <Setter Property="Background" Value="LimeGreen" />
</Style>

到此:

<Style x:Key="SparklineDataPointStyle" TargetType="charting:LineDataPoint">
        <Setter Property="Background" Value="LimeGreen" />
</Style>

即,删除先前设置为null的模板设置器。

我不太清楚为什么会这样,但我会调查。

答案 1 :(得分:1)

要调查内存使用问题,可以使用ANTS内存分析器。 我认为它比WinDbg更有用,它显示了每种类型的实例数,并显示了类之间的一些关系图。我的意思是他们是如何联系的。