加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

WebBrowser 控件 内存溢出(泄露) 解决方案汇总

(2011-10-26 00:10:58)
标签:

杂谈

分类: 软件开发
在Windows程序开发中,使用了Webbrowser 控件,陆续发觉该控制存在着不少的问题,当中最严重的是他胃口太好太大,每load一个页面便会吃掉十来M的内存。

Webbrowser是非托管代码,而我开发时用了托管代码,一开始在这方面进行了优化,发现效果没什么改善。

后一查资料才发现病根 Microsoft的内存溢出bug,微软给出了补丁,但是微软声称说没有经过回归测试,但无论如何,这是官方提供的解决方案,也是比较冶本的。综合考虑,后来我取用了第一和第二种相结合的方式,给Webbrowser瘦了身。


一、官方解决方案

官网下载 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"

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有