我有一个附加属性,可以在整个应用程序的一系列控件中使用。该属性订阅静态事件,并具有事件处理程序,在该事件处理程序中,附加属性绑定到的控件的某些属性被修改。
问题在于其中的某些控件会被重新创建(例如,它们是ItemsControl或Window的一部分,可以关闭并重新打开它们),然后通过附加属性将其保存在内存中。在我的WinForms版本中,我订阅了处置事件以使控件知道何时将其删除,然后取消订阅事件处理程序。但是,WPF没有这样的事件。卸载,当它被临时删除时会被调用(例如通过选项卡控件更改选项卡)。
那么,当应删除控件以避免内存泄漏时,如何删除这些控件引用?目前,如果我刷新页面之一,则我的应用程序使用的内存会不断增加。
答案 0 :(得分:1)
我找到了一个可行的解决方案。我没有保存对控件的引用,而是将其设置在WeakReference对象中,以允许垃圾收集器收集它。