我的控制因为它所绑定的命令而保持活着。我怎么能打破这个参考?这导致我的应用程序中出现重大内存泄漏。该控件位于DataTemplate内部,因此我无法直接访问它。
这是我的ANTS内存配置文件:
我究竟如何打破这种联系?
答案 0 :(得分:2)
虽然我合并了WeakEventListener
,但我发现我的问题在于我用来封装图片的控件。我把它挂钩到DownloadProgress
,ImageOpened
和ImageFailed
事件,从未解开它们。我的想法是,我的代码中没有任何其他内容触及BitmapImage
对象,因此它们将被控件垃圾收集。它看来,情况并非如此。 BitmapImage
对象由Microsoft的代码深处称为“ManagedPeerTable.PeggedManagedPeersWithRefs”的静态成员(因此是GC根)引用。它非常深,谷歌搜索只返回了五个结果。现在我想会有六个。