为什么WebBrowser组件会吃掉如此多的内存以及如何刷新WebBrowser缓存

时间:2012-07-26 14:40:09

标签: c# .net memory-leaks webbrowser-control browser-cache

我正在使用由2个WebBrowser组件组成的自定义文本框(只读)。它正在显示具有复杂布局的文本(生成html代码是制作此类文本查看器的最简单选项)。

我还在所有组件上绑定了mousedown事件:

foreach (HtmlElement html in webBrowser1.Document.All)
{
     html.MouseDown += new HtmlElementEventHandler(Scrollback_Clicked);
}

每次我完成加载html源代码后都会发生这种情况。 (这是无关紧要的,但它是我所做的WebBrowser控件的唯一定制,以防万一它不起作用的原因)

但是,经过几百次重新加载后,文本框会占用大约2GB的内存,我怀疑它是一个浏览器控件实现的缓存,它存储了到目前为止生成的所有HtmlDocuments。

有没有办法禁用或刷新WebBrowser控件的缓存?

1 个答案:

答案 0 :(得分:2)

首先,您可能leaking event handlers,考虑您注册它们的方式,然后再对它们进行处理。这可能会导致轻微的性能问题,但它显然无法解释消耗过多2 GB的RAM。

无论如何,WebBrowser控件基于Internet Explorer,因此它可能会从那里继承内存泄漏。您也可以使用缓存理论。有一篇知识库文章准确地讨论了这个问题以及如何解决它:How to clear the cache when your application hosts a WebBrowser control in Visual C# .NET

基本上,它建议您使用WinInet APIs手动刷新浏览器缓存。但这对我来说似乎是一个大锤解决方案。它正在使用全局解决方案解决本地问题,这应该引发一些危险信号。

如果我是你,我会重新考虑我的应用程序的设计,以便完全避免这个问题。 RichTextBox controls没有任何show-stopper内存泄漏。 : - )