4

我正在使用 PerfView 来发现内存泄漏。

在比较了两个快照之后,我注意到在 PerView 中的 RefTree -> static vars 选项卡下。 MyPageDependencyProperty我的占了 Inc% 的 78.9%。

MyPageDependencyProperty不应该在那里,因为我关闭了它所属的 xaml 窗口。

我不使用AddValueChanged会导致内存泄漏的。

DependencyProperty揭示 ObservableCollection<object>。_

有谁知道我可以解决这个问题吗?

谢谢

4

2 回答 2

5

而不是像这样定义你的属性,它会创建一个静态的 ObservableCollection。

public static readonly DependencyProperty SomePropertyProperty  = DependencyProperty.Register(typeof(..), typeof(..),....,.... , new ObservableCollection<...>());

你应该做这个:

public static readonly DependencyProperty SomePropertyProperty = DependencyProperty.Register(typeof(..), typeof(..),...., null);

public MyControl()
{
   this.SomeProperty = new ObservableCollection<...>();
}

你的问题会神奇地消失。:)

于 2013-11-14T11:24:55.523 回答
-3

这可能是因为 CLR 在某处有到对象的链接,而它没有Dispose。尝试强制垃圾收集器运行并跟踪会发生什么。

于 2013-11-14T09:37:39.750 回答