1

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

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

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

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

但是,经过数百次重新加载后,文本框占用了大约 2GB 的内存,我怀疑它是 browsercontrol 实现的缓存,它存储了迄今为止生成的所有 HtmlDocuments。

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

4

1 回答 1

2

首先,您可能正在泄漏事件处理程序,考虑到您注册它们的方式,然后未能处置它们。这可能会导致轻微的性能问题,但显然不能解释过多的 2 GB RAM 的消耗。

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

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

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

于 2012-07-26T15:02:22.700 回答