2011-10-16 49 views
1

众所周知,WebBrowser控件在某些情况下会增加内存使用量而不会释放内存。极端情况是在Google即时启用时在Google中浏览网页时。它每页增长约3 MB。即使我导航到about:blank或者如果我处理WebBrowser,该内存也不会被释放。在单独的线程或进程上运行控制,以便100%控制其消耗的内存

我知道任务管理器中的内存不可靠,并且有许多方法可以检查我的应用程序正在使用的内存,但由于我真正关心的是防止我的应用程序崩溃,因此我正在使用MemoryFailPoint类来找出我剩下多少内存。和我的previous result一样,每页可以使用约3 MB的空间。

我做的最后一项测试是在我的应用程序中创建一个表格,其中只有一个WebBrowser,在Google上使用Google Instant进行搜索,然后每3秒自动导航到下一页。剩余内存将减少,当接近100 MB时,我将关闭表单(这将处理WebBrowser),并看到内存保持不变。我还用SOS确保WebBrowser已妥善处置。

GC.Collect()这些技巧不会释放内存。安装IE 8或IE 9也不会。我不想列出所有我尝试过的东西,因为这会让问题太长。我甚至没有联系过微软的付费支持。

另一方面,关闭并重新启动应用程序将释放内存。所以最接近我对这个问题的一个明确的解决方案是重新启动应用程序。

所以我的问题是,我怎么能尽可能接近重新启动应用程序而不实际重新启动它?我正在考虑在单独的进程上运行WebBrowser,并根据需要重新启动它。与此问题是,我需要在另一个窗体,它会弄乱我的应用程序的用户界面。

我在想应该有办法告诉WebBrowser“请离开我真的不想让你了!”通过也许卸载任何DLL消耗所有这些内存,然后重新加载它。我正在寻找极端的措施。

请注意,这个问题与我的previous one不一样。我在这里需要知道的不是如何释放WebBrowser所使用的内存(因为这是不可能的,或者至少没有已知的解决方案),但是,一般来说,如果有一种方法可以在“沙箱”,然后清除这个沙箱。非常像在单独的过程中运行它。

任何想法?

回答

1

检查事件处理程序...如果您在关闭表单之前不删除它们,并禁止WebbRowser控件真正处理...

您可以尝试几件事情:删除任何附加事件处理程序后Dispose()

+0

已经尝试过大部分。检查过的事件处理程序(也使用SOS确保WebBrowser已经消失)并尝试了你的第一点。但我真的不会花时间尝试迁移到'csEXWB',因为已经阅读过有关泄漏的信息,而且它也基于IE,所以它很可能会有相同的泄漏,再加上它有0个技术支持,_etc_ 。但awesomium看起来很有希望。我会试一试并回报:)。 – Juan

相关问题