C#编写的程序 使用Webbrowser控件,占用大量内存?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#编写的程序 使用Webbrowser控件,占用大量内存?相关的知识,希望对你有一定的参考价值。

C#编写的程序 使用Webbrowser控件循环加载100个网页(在一个网页停留一段时间后跳转到另一个网页),一段时间后内存占用很大,有200M左右,有什么办法可以解决这个问题?备注:XP SP3系统,IE6。

参考技术A Webbrowser其实就是IE浏览器,占用内存并不是C#占用,而是IE6占用.
这个基本上没办法,
最简单的例子,我看网页一上午,如果IE没关闭,内存一般就占300-500MB了,关了IE再开才能清内存
参考技术B 这算小的了,你随便用哪个浏览器开几个网页都是几百兆 参考技术C 这个你要懂得如何去清理内存啊 !把不用的内存清理了啊

如何在 C# 中使用 WebBrowser 控件清除浏览历史记录

【中文标题】如何在 C# 中使用 WebBrowser 控件清除浏览历史记录【英文标题】:How to clear browsing history using WebBrowser control in C# 【发布时间】:2012-08-09 12:49:22 【问题描述】:

我想在 WebBrowser 完成浏览后清除 C# 中 WebBrowser 控件的浏览历史记录。

这是我的代码:

try

    foreach (string sr in File.ReadAllLines("link.txt"))
    
        webBrowser1.Navigate(sr);
        webBrowser1.ScriptErrorsSuppressed = true;
    
    while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
    
        Application.DoEvents();
                                   

catch(Exception)

    MessageBox.Show("Internet Connection not found","Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
    this.Close();

【问题讨论】:

我提供了一个解决方案,看看我的回答,使用API​​是唯一可靠的方法,否则你会发现它在某些版本的windows中不起作用。 【参考方案1】:

Internet 临时文件

System.Diagnostics.Process.Start("rundll32.exe", "InetCpl.cpl,ClearMyTracksByProcess 8")

Cookies()

System.Diagnostics.Process.Start("rundll32.exe", "InetCpl.cpl,ClearMyTracksByProcess 2")

历史()

System.Diagnostics.Process.Start("rundll32.exe", "InetCpl.cpl,ClearMyTracksByProcess 1")

表格(数据)

System.Diagnostics.Process.Start("rundll32.exe", "InetCpl.cpl,ClearMyTracksByProcess 16")

密码

System.Diagnostics.Process.Start("rundll32.exe", "InetCpl.cpl,ClearMyTracksByProcess 32")

删除(全部)

System.Diagnostics.Process.Start("rundll32.exe", "InetCpl.cpl,ClearMyTracksByProcess 255")

全部删除 - 同时删除附加组件存储的文件和设置

System.Diagnostics.Process.Start("rundll32.exe", "InetCpl.cpl,ClearMyTracksByProcess 4351")

【讨论】:

请阅读我的回答,这不是推荐的方法,因为它在某些版本的 Windows 中不起作用,你真的需要点击 API。【参考方案2】:

实际上,有两种类型的历史。一个是“已访问”页面列表,另一个是您在 IE 历史用户界面中看到的实际历史记录。

您将获得 3 种类型的缓存,以“Cookie:”开头,另一种以“Visited:”开头 - 仅代表访问过的站点列表(它不是历史记录,不要混淆两者),最后一种类型只是以 http:// 或 https:// 开头的 url 形式出现。循环播放后,您可以选择要删除的内容。

如果要删除访问过的页面列表,则需要使用 DeleteUrlCacheEntry 删除每个项目。通过使用 FindFirst/NextUrlCacheEntry API 循环访问,您可以访问创建这些项目的时间和日期,因此仅删除在您的浏览器会话开始之后和完成之前创建的项目。

对于 FindFirst/NextUrlCacheEntry 和 DeleteUrlCacheEntry 信息,网上有预先写好的代码可以使用,然后你可以很容易地创建一个过滤器来决定你在循环这些缓存条目时要删除哪些项目.

如果我能提供进一步的帮助,请告诉我。

【讨论】:

以上是关于C#编写的程序 使用Webbrowser控件,占用大量内存?的主要内容,如果未能解决你的问题,请参考以下文章

VB使用webbrowser控件时怎样释放内存?我使用了许多webbrowser数组时,只见占用内存越来越大。最后崩溃

C# WebBrowser控件使用整理

C# WebBrowser HTML 与脚本和图像的引用

C# WebBrowser 控件 - 使用 InvokeMember("Click") 提交表单不起作用

如何解决VB中WebBrowser控件持续打开网页占用的内存

C# Uwp app webbrowser 控件无法获取设备位置