如何修复由ListBox的_anchorItem字段引起的内存泄漏?

时间:2012-09-14 11:02:31

标签: wpf memory-leaks listbox

我注意到ListBox在其私有_anchorItem字段中保留对已删除项的引用。

我执行的步骤如下。 我创建一个带有ListBox的Window,并将一个ObeservableCollection绑定到该ListBox的ItemSource属性。然后,在单击窗口中的项目后,我以编程方式清除ObeservableCollection。

此时ListBox为空,但它的_anchorItem字段仍然具有对我单击的项的引用。我怎样才能以编程方式删除引用?

我需要删除对该项的引用的原因是因为它是我的应用程序中内存泄漏的原因。

1 个答案:

答案 0 :(得分:0)

我的解决方案是通过反射设置内部成员。它知道这是一个黑客,但内存问题最终会出现问题。

        var propertyInfo = (typeof(ListBox)).GetProperty("AnchorItem", BindingFlags.Instance | BindingFlags.NonPublic);



        propertyInfo.SetValue(this, null, null);