C# WebBrowser 如何减少内存占用/如何解决 WebBrowser 的内存泄漏?

问题描述

我正在使用 Webbrowser 编写一个程序(我们称之为 )来完成一些自动网络表单填写工作等,只是为了好玩。 要做以下工作:打开一个tabPage,导航到一个URL,做一些事情,然后关闭tab。

总共有大约25个URL需要导航,但我发现程序占用的内存在不断增长,大约10个小时后需要大约120m物理内存和大约240m虚拟内存内存,虽然第一个小时只需要40m左右的物理内存。

对于这个问题,使用GC显然不是一个有用的解决方案,因为似乎有些对象永远不会被释放,因为我发现当我调用GC时,它只会将物理内存占用转换为虚拟内存占用,总共内存占用永远不会减少。

我已经编写了一些代码来尝试在 tabWindows 像这样关闭时处理它们:

// Find the active page
TabPage page = this._tabControl.SelectedTab;
// Check whether there is actually a page selected
if (page != null)
{
    //<try to solve the memory leak -1- start>
    ControlCollection controls = page.Controls;
    if (controls!=null) {
        foreach (Control control in controls) {
            if (control != null)
            {
                control.dispose();
            }
        }
    }
    //<try to solve the memory leak -1- end>
    // Remove the page
    this._tabControl.TabPages.Remove(page);
    //<try to solve the memory leak -2- start>
    page.dispose();
    //<try to solve the memory leak -2- end>
}

上面的代码是按照JDBC内存泄漏的解决方案,但我不太确定,除了控件和页面对象之外还有其他对象需要处理吗?

我不得不在互联网上进行大量搜索

  • 有些线程说会调用一些Windows API,但与GC方案类似;
  • 有人说要把IE升级到IE8,但我已经升级到IE11;
  • 有些人说是tabControl的bug,IE也有同样的问题,所以我在三台不同的PC上做了这样的测试:

打开一个新选项卡,导航urlA,加载文档后,关闭选项卡,然后再次打开一个新选项卡,导航urlB,加载文档后,关闭选项卡,依此类推... 经过大约五次测试我发现IE占用的内存越来越大,就像一样。

我也做过类似的测试:

打开一个新选项卡,导航到 urlA,加载文档后,导航到 urlB,加载文档后,导航到 urlA,等等......(永远不要关闭 tabPage)。经过大约五次测试,它仍然存在同样的内存增长问题。

那么,如果真的是IE tabControl的bug,有没有什么hotfix或者trick或者手动补丁,甚至一些破解来解决这个bug?或者其他方式?

非常感谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)