【发布时间】:2015-03-07 01:09:19
【问题描述】:
我在一个完全开发的应用程序中遇到了内存泄漏问题。带有 MVVM Light 5 的 C#。 我花了整整一周的时间学习如何使用内存分析器,阅读常见的内存泄漏问题等等。我至少花了 25 多个小时来解决这个问题。我仔细清除了所有事件处理程序,甚至在 BackNavigation 之后以及检测到循环导航时将每个页面的 DataContext 和 LayoutRoot 清空(我将页面的最后一个运行实例存储在 App.cs 中,当该页面的另一个实例即将创建,我检查是否已经有一个实例,如果有,我清除它)。
我已经用尽了我的努力,我不知道从哪里开始。
以下是在重复浏览 2 个页面后的内存分析屏幕截图的链接。 由于某种原因,每个页面的实例都没有被释放,但它们被减少到仅仅是字节。
如您所见,从开始到结束,我保留的分配和保留的视觉效果之间的差异非常小(总共大约 30mb)。
但在图表中,我看到了将近 100mb 的差异。
这让我快疯了,我认为底层平台在管理这方面会做得更好。非常感谢任何帮助。
【问题讨论】:
-
您是否正在使用 WebBrowser 实例?我不得不从我的应用程序中完全删除它,因为它给了我似乎无法修复的内存泄漏。
-
也可以是图片
-
感谢大家的回复。我根本没有使用 WebBrowser 控件。我确实有一些图片,但仅在 5 个导航周期内跳跃 100mb 有点多。最大的图片(全景背景)为 400kb。其余的小于 10kb。
-
KooKiz,我正在阅读你的博客,顺便说一句,谢谢分享。您在其中声明:“……什么都没有。这意味着我们可能正在泄漏本机内存(分析器仅显示托管内存,即 .NET 对象)。”这正是我的情况,我对分析器更满意,但不如你好。发现您博客文章中的泄漏令人印象深刻,希望我能解决这个问题>_
-
@MattF 如果你愿意分享你的代码,请通过 twitter (@kookiz) 或我的博客联系我,我会在这个周末找时间帮助你
标签: c# windows-phone-8 memory memory-leaks