微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。