【发布时间】:2019-11-26 17:55:43
【问题描述】:
我正在开发一个具有一个主容器的 MVVM (WPF) 应用程序。显示的视图取决于所选的菜单项(例如主页、产品信息等)。每当第一次访问视图时,内存消耗会随着关联的视图模型的实例化而略有增加;当进一步访问同一个视图时,由于使用了关联视图模型的现有实例,因此内存保持不变。
但是,一个包含WebBrowser 控件的视图在每次访问时都会无一例外地增加约80MB 的内存使用量;这个内存永远不会被释放——在 Home 和那个视图之间反复切换会导致应用程序耗尽内存并崩溃。使用内存分析器我发现这种增加发生在非托管代码中,尤其是user32.dll。
浏览其他 StackOverflow 帖子时,我注意到 WebBrowser 和内存泄漏问题反复出现,但大多数帖子都指出这是 IE7 的问题。我们正在为我们的应用程序强制使用 IE11。我需要一些帮助来调查这个问题和潜在的解决方案。恐怕我无法发布代码,但任何提示都会有所帮助。
【问题讨论】:
-
Internet Explorer 通常存在很多问题。我建议不要将您的程序限制在 IE 上,而是将其分支出来以支持其他更好维护的浏览器。
-
@Symon 这实际上是未来版本的计划,切换到CefSharp。我只是想知道在那之前我们是否能找到一个修补程序。在我看来,对于这个功能,最好的解决方案是在浏览器中打开链接,但我不做这些决定。
-
那么下一步将在您怀疑发生内存泄漏的地方放置一个断点(听起来您很清楚它在哪里)。然后,仔细检查以确保所有内容都按需要进行处理,并且需要删除的实例 正在 被删除。
标签: c# .net wpf memory-leaks unmanaged