WebBrowser内存泄露

使用WebBrowser控件开发的程序,占用内存会随着时间不停增加,最终内存溢出致使崩溃。究其缘由是因为其自身的缺陷形成的。每一次加载新页面,WebBrowser就会多占用10-20M内存,有资料说是由于其内在的机制没有释放而致使的。这是微软认可的已知BUG,具体的修复补丁点此下载(此补丁彷佛只支持XP、200三、Vista)。html

《WebBrowser 控件 内存溢出(泄露) 解决方案汇总》这篇文章中给出了几个解决办法,具体的内容以下:spa

1.创建线程,动态建立WebBrowser,再试用完后freeandnil,线程销毁WebBrowser所占用的内存也随即销毁。线程

2.创建多程序,经过程序1,调用程序2进行页面访问,当操做完后,程序2退出,内存自动清除回收,程序与程序之间的信息交互可经过ini文件的读取和保存。orm

3.把IE升级到IE8,若是是使用的VB6开发的程序,能够修改注册表,使程序可以正常运行。修改脚本以下:htm

  1. Windows Registry Editor Version 5.00
  2. [HKEY_CLASSES_ROOT\TypeLib\{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}]
  3. [HKEY_CLASSES_ROOT\TypeLib\{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}\1.1]
  4. @="Microsoft Internet Controls"
  5. [HKEY_CLASSES_ROOT\TypeLib\{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}\1.1\0]
  6. [HKEY_CLASSES_ROOT\TypeLib\{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}\1.1\0\win32]
  7. @="C:\\WINDOWS\\system32\\ieframe.dll

我亲自尝试过第二个解决方案,可是我并无使用ini文件进行读取和保存信息,而是采用的调用Window API跨进程传递信息来解决的,能够参考这篇文章《Winform跨进程通信》blog