我在一个完全开发的应用程序中遇到内存泄漏问题真的很困难。带有 MVVM Light 5 的 C#。 我整整一周都在学习如何使用内存分析器,阅读有关常见内存泄漏问题的资料,等等。我至少花了 25 小时以上的时间来解决这个问题。我仔细清除所有事件处理程序,甚至在 BackNavigation 之后以及检测到循环导航时清除每个页面的 DataContext 和 LayoutRoot(我将页面的最后一个运行实例存储在 App.cs 中,当该页面的另一个实例即将创建,我检查是否已经有一个实例,如果有,我将其清除)。
我已经用尽了我的努力,我不知道从这里去哪里。
下面是在 2 个页面之间反复导航后的内存分析屏幕截图的链接。 由于某种原因,每个页面的实例都没有被释放,但它们正在被减少到仅仅字节数。
如您所见,从开始到结束,我保留的分配和保留的视觉效果之间的差异非常小(总共大约 30mb)。
但在图中,我看到了将近 100mb 的差异。
这让我非常抓狂,我认为底层平台可以更好地管理它。非常感谢任何帮助。
最佳答案
I carefully clear all event handlers, and even null out the DataContext and LayoutRoot of each page after BackNavigation
我建议建立一个系统来重复使用虚拟机,并且只在真正需要时才获取新数据。我开发了一个专业的 map 应用程序,目前在 WP 商店中,我们只根据需要创建项目,并且从未创建过两次 VM。
关于c# - WP8 大量内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27848265/