TWebbrowser大量内存泄漏:到目前为止没有解决方案

问题描述 投票:1回答:2

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

问题是TWebbrowser存在一个众所周知的内存泄漏问题,其中,每当您导航到新页面时,用于该应用程序的内存都会增加。一段时间后,我的应用程序可以轻松使用超过2GB的RAM。在浏览了数百次之后,抛出'Out of memory''Out of system resources'异常,并且解决该异常的唯一方法是重新启动应用程序。

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

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

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

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

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

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

delphi memory-leaks delphi-2007 twebbrowser
2个回答
4
投票

QC#106829描述了TWebBrowser导致内存泄漏的一种可能原因。访问Document(以及通过TOleControl.GetIDispatchPropTOleControl.GetIUnknownProp实现的任何其他属性)会导致泄漏,因为它调用AddRef而不调用Release。解决方法是,您可以手动调用Release,或者可以修补VCL(see here),也可以避免出现有问题的属性(例如,使用browser.DefaultInterface.Document而不是browser.Document)。


0
投票

您是否找到有关TWebbrowser内存泄漏的解决方案?

© www.soinside.com 2019 - 2024. All rights reserved.