首页 新闻 会员 周边 捐助

C# 内存泄漏(webBrowser)

0
悬赏园豆:50 [已解决问题] 解决于 2012-09-24 19:10

我采用的是WebBrowser控件写的C#程序,不断刷网页数据,程序运行12个小时,电脑出现内存不足,然后程序卡死,报错内存泄漏...面对这个问题,我希望各位大哥给点建议,如果解决webbrowser内存泄漏的事件????

jiajinhao的主页 jiajinhao | 初学一级 | 园豆:143
提问于:2012-08-15 17:14
< >
分享
最佳答案
0
收获园豆:25
Launcher | 高人七级 |园豆:45050 | 2012-08-15 17:26

你提供的网页,我用ie打不开。。。

jiajinhao | 园豆:143 (初学一级) | 2012-08-16 14:31

@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"

Launcher | 园豆:45050 (高人七级) | 2012-08-16 14:44
其他回答(2)
0

不断刷网页数据这个代码不知道是否用的递归?

如果是可以考虑把递归改为循环试试。

如果不是,不好意思,我废话了 呵呵

收获园豆:25
寒风吹过 | 园豆:149 (初学一级) | 2012-08-15 17:53

谢谢你的提醒,不过刷网页,我采用的就是递归调用,从网页中找到我所需要的元素或者东西

支持(0) 反对(0) jiajinhao | 园豆:143 (初学一级) | 2012-08-16 14:30

@jiajinhao: 一般来说,递归都可以改为循环。

递归的话,GC不会回收,一直等到递归完毕才会回收内存。导致程序占用内存不断膨胀。

按照你说的程序运行12个小时,电脑出现内存不足,我估计就是这个问题。

支持(0) 反对(0) 寒风吹过 | 园豆:149 (初学一级) | 2012-08-16 14:46
0

我在我的博客里写一篇。有两种方法可以解决,第一种就是在窗体的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

霁雪湖上三映月 | 园豆:270 (菜鸟二级) | 2018-06-30 18:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册