TWebbrowser大量内存泄漏:迄今为止尚无解决方案 [英] TWebbrowser massive memory leaks : no solution so far

查看:62
本文介绍了TWebbrowser大量内存泄漏:迄今为止尚无解决方案的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个使用 TWebbrowser 的应用程序来定期导航到特定的URL并提取一些数据.该应用程序保持24x7全天候运行,并在页面中进行大量导航.

问题是 TWebbrowser 有一个众所周知的内存泄漏问题,其中,每次导航到新页面时,用于该应用程序的内存都会增加.一段时间后,我的应用程序可以轻松使用超过2GB的RAM.在导航数百次后,将抛出内存不足" 系统资源不足" 异常,并且解决该问题的唯一方法是重新启动应用程序./p>

奇怪的是, FASTMM 从不显示这些泄漏.当我使用我的应用程序几分钟并关闭它时,没有任何报告.

多年来,我一直在寻找解决这个问题的方法(实际上是从2007年编写应用程序的第一个版本以来).有一些解决方法,但实际上,它们都不能解决问题.对我来说,唯一的解决方法是定期关闭和打开该应用程序.

我已经测试了 SetProcessWorkingSetSize 方法,但是它只是暂时缩小了应用程序使用的内存.几秒钟后,该应用程序再次使用大量内存.

我也尝试过 EmbeddedWB ,但是由于它是从 TWebbrowser 衍生而来的,因此也遇到了同样的问题.

顺便说一句,我不能使用像 IdHTTP 这样的简单组件,因为我需要在访问的网站中进行一些JavaScript操作.

有人知道这个问题真的有解决方案吗?

解决方案

解决方案

QC#106829 describes one possible cause of memory leaks with TWebBrowser. Accessing Document (and any other properties that are implemented via TOleControl.GetIDispatchProp or TOleControl.GetIUnknownProp) causes leaks because it calls AddRef without ever calling Release. As a workaround, you can manually call Release, or you can patch the VCL (see here), or you can avoid the problematic properties (for example, by using browser.DefaultInterface.Document instead of browser.Document).

这篇关于TWebbrowser大量内存泄漏:迄今为止尚无解决方案的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆