我有一个WPF应用程序。那有内存泄漏。我很难找到原因。
尝试使用ANTS探查器,我发现的最好的事情是
我有一个活动public event Action RegistryPropertyChanged
我的代码中有许多其他事件正在注册该事件。
例如
preferences.RegistryPropertyChanged+= new Action (SetupToolTips);
其中一些人正在以这种方式注册
preferences.RegistryPropertyChanged += OnMSChanged;
哪种方式更好,使用,动态还是静态?什么可能导致泄漏的想法?
在我尝试删除 RegistryPropertyChanged 使用的所有行之后,没有泄漏。所有这些事件都出了问题,但我找不到正确的理由。任何想法和帮助表示赞赏。谢谢
答案 0 :(得分:3)
使用对象时,请确保在处置时将事件解耦 例如:
preferences.RegistryPropertyChanged -= OnMSChanged
另外,我遇到一个问题,我有一个通过成员引用托管其他对象的对象。如果您正在使用大量对象,则在完成对象时可能不会删除内存引用。
只是一个示例,但如果您有一个Car对象并且它托管一个Engine对象,请确保在完成Car对象后将Engine对象成员引用设置为NULL。 您需要这样做,因为如果有一个引用回到系统中某个地方主动使用的内容,则这些对象将不会被处置,因为它们是“活动的”。
这都是非常高的水平,但我希望它有所帮助。
答案 1 :(得分:1)