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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何解决VB中WebBrowser控件持续打开网页占用的内存相关的知识,希望对你有一定的参考价值。

vb中添加了webbrowers控件。打开一个网页,然后手工操作,然后在打开另一个网页,再次手工操作,这个过程是一直循环的。 随着程序运行的时间久了,任务管理器里面程序的内存占用越来越大。请问该如何释放webbrowers控件产生的内存呢?大概的代码:Private Sub Command2_Click()

这个是不可能的,我做过类似的程序,打开的网页会持续在、占用内存,即使unload webbrowser也不行。我也试过在心form中加载webbrowser,用完后 unload form,但仍然不行。目前我解决这个问题的办法是,将程序分成两部分,一部分用于控制,另一部分专门用于打开网页,也就是说,每次需要打开一个网页的时候,控制部分会调用另一个exe打开,并返回想要的结果,然后让那个exe自动关闭。也只有关闭exe才能使webbrowser占用的内存释放掉。

还可以用另一个简单的办法,隔一段时间重启自己。不过这个虽然做起来简单,但在应用上有很多不方便和限制,发挥的余地更少。

如果没有用户与网页交互的需求的话,完全可以不用webbrowser控件,而是用inet控件或者API URLDownload。

inet控件相比webbrowser控件来说,占用的内存要小得多,因为它仅仅下载网页,而不下载网页中的图片或者内嵌网页。但它的缺点也是不能释放内存。只是比webbrowser稍微好点,并不能从根本上解决问题。它不能运行js,下载回来的也只是html源码,不过可以在下载页面之前用webbrowser控件访问一次指定页面,来完成登录操作,然后inet就会与webbrowser共用一个session,下载回来的页面就是已经登录之后下载的页面了。

URLDownload,这个东西基本不占用内存。不过其缺点就是如果要下载的页面需要自动登录的话,就不行了。也就是说,它只能下载回来网页源码,而不能使其中的js运行。也就是说,这个玩意只能用于不要求用户登录的网站。即,登录与不登录得到的页面源码是一样的才行。比如moko。而像renren那样的网站,就不能用这个了。

根据你的需求自己决定吧
参考技术A 这个是不可能做到的,但是可以通过别的方式来释放控件。
释放控件可使用动态控件来完成,释放的时候使用set xxx=nothing

Webbrowser控件相当于开了一个IE窗口,在不停浏览网页的同时为了提高性能自然会消耗一定的内存,这些类似缓存的内存消耗是没有办法释放的,除非把Webbrowser整个控件释放掉。
参考技术B Webbrowser控件相当于开了一个IE窗口,在不停浏览网页的同时为了提高性能自然会消耗一定的内存,这些类似缓存的内存消耗是没有办法释放的,除非你把Webbrowser整个控件释放掉。

释放控件可使用动态控件来完成,释放的时候使用set xxx=nothing

另一个问题,为什么要想着去释放内存?是你的内存不够用了,还是只是你自己看着不爽?本回答被提问者采纳
参考技术C 本人也遇到了这个问题,求解决

vb的WebBrowser控件怎样避免浏览器脚本错误?

用vb的WebBrowser控件打开一个网页,经常出现脚本错误(如图)。而直接在浏览器中输入网址不会有错误。怎样避免用WebBrowser控件打开网页时弹出的脚本错误提示呢?
要通过vb编程代码实现

启动IE,执行“工具→Internet选项”菜单,选择“高级”选项卡,选中“禁止脚本调试”复选框,最后单击“确定”按钮即可。追问

要通过vb编程代码实现

追答

Private Sub Command1_Click()
'首先引用Registry Access Functions
Dim mREG As New REGTool5.Registry
Dim ret As Boolean
ret = mREG.UpdateKey(HKEY_CURRENT_USER, "Software\Microsoft\Internet Explorer\Main ", "Disable Script Debugger ", "yes ")
ret = mREG.UpdateKey(HKEY_CURRENT_USER, "Software\Microsoft\Internet Explorer\Main ", "DisableScriptDebuggerIE ", "yes ")
End Sub

追问

如有时间能讲解下吗?

追答

就是修改注册表HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main下的
"Disable Script Debugger "为 "yes "
"DisableScriptDebuggerIE "为 "yes"
相当于我一开始说的选中“禁止脚本调试”复选框

追问

这样修改注册表会被360等软件查出吗?

追答

你试下吧,我没装360

参考技术A 窗体里加入下面代码即可:

Private Sub WebBrowser1_DownloadBegin()
WebBrowser1.Silent = True
End Sub
Private Sub WebBrowser1_DownloadComplete()
WebBrowser1.Silent = True
End Sub追问

如有时间能讲解下原理吗?

追答

Silent是WebBrowser控件的一个属性,用于屏蔽网页错误弹出对话框。上面代码就是在网页开始加载和加载结束的过程中屏蔽页面的错误对话框。

追问

1.需要不需要把Private Sub WebBrowser1_DownloadBegin()改成:Private Sub WebBrowser1_DocumentBegin(ByVal pDisp As Object, url As Variant)

2.需要不需要把Private Sub WebBrowser1_DownloadComplete()改成:Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, url As Variant)

追答

不需要的,按我写的那样就可以,我自己也在用。

追问

因为我的程序中已经有了Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, url As Variant)的代码,我把你代码中WebBrowser1.Silent = True这一行直接加入Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, url As Variant)和End Sub 之间不行吗?

追答

那过程名不一样的哦,我那个是WebBrowser1_DownloadComplete,你的是WebBrowser1_DocumentComplete。

本回答被提问者采纳
参考技术B IE设置或网页本身有错

以上是关于如何解决VB中WebBrowser控件持续打开网页占用的内存的主要内容,如果未能解决你的问题,请参考以下文章

VB中如何将WebBrowser打开的网页图片缩放显示?

vb 的webBrowser控件为啥有时候打开网页速度奇慢?用IE却正常.

vb的WebBrowser控件怎样避免浏览器脚本错误?

delphi webbrowser,如何调整webbrowser里面打开网页的大小,或者使打开的内容适应webbrowser控件的大小。

vb6 webbrowser 如何判断当前网页中获取焦点的是否一个文本框?

vb的webbrowser控件问题