你提供的网页,我用ie打不开。。。
@jiajinhao: 让你们的网管把权限给打开。这是一个已知BUG,官方的解决办法:
http://support.microsoft.com/kb/943510/zh-cn
偏方:
1,建立线程,动态创建WebBrowser,再试用完后freeandnil,线程销毁WebBrowser所占用的内存也随即销毁~
2,建立多程序,通过程序1,调用程序2进行页面访问,当操作完后,程序2退出,内存自动清除回收,程序与程序之间的信息交互可通过ini文件的读取和保存~
[color=red][b]三、升级运行环境解决方案[/b][/color]
还有网友提供了下面这种方案:
把IE升级到IE8以后,这一BUG将不复存在了。
该兄弟声称升级IE后,生成的EXE文件可用,如果是用VB6开发的源程序,则又不能识别webbrowser控件了。
这时可以采用修改注册表,注册组件的方法解决这一问题:
将下面文字另存为一个.reg文件双击导入注册表:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\TypeLib\{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}]
[HKEY_CLASSES_ROOT\TypeLib\{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}\1.1]
@="Microsoft Internet Controls"
[HKEY_CLASSES_ROOT\TypeLib\{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}\1.1\0]
[HKEY_CLASSES_ROOT\TypeLib\{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}\1.1\0\win32]
@="C:\\WINDOWS\\system32\\ieframe.dll"
不断刷网页数据这个代码不知道是否用的递归?
如果是可以考虑把递归改为循环试试。
如果不是,不好意思,我废话了 呵呵
谢谢你的提醒,不过刷网页,我采用的就是递归调用,从网页中找到我所需要的元素或者东西
@jiajinhao: 一般来说,递归都可以改为循环。
递归的话,GC不会回收,一直等到递归完毕才会回收内存。导致程序占用内存不断膨胀。
按照你说的程序运行12个小时,电脑出现内存不足,我估计就是这个问题。
我在我的博客里写一篇。有两种方法可以解决,第一种就是在窗体的closing事件中,显式的使用webbroser.Dispose()将webbroser进行释放,然后再调用GC.Collect()进行垃圾回收。如果不进行Dispose()而直接用是GC.Colloct()是释放不掉内存的,就算你把窗体关了,也会有内存被占用的问题。 第二种方法,就是使用WPF的webbroser空间来替代winform的webbrower来进行使用。wpf的webbrower在winform的基础上应该进行很多的优化,具体细节不明,但是不显示Dispose也不会有内存泄漏的问题。 这是我在工作的时候对webbrower的总结文章 有兴趣可以看一下 https://blog.csdn.net/ZslLoveMiwa/article/details/80616399