gpt4 book ai didi

delphi - TWebbrowser 大量内存泄漏 : no solution so far

转载 作者:行者123 更新时间:2023-12-04 00:44:28 26 4
gpt4 key购买 nike

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

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

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

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

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

我也试过 EmbeddedWB ,但当它从 TWebbrowser 下降时,它被同样的问题所困扰。

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

有谁知道这个问题是否真的有解决方案?

最佳答案

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

关于delphi - TWebbrowser 大量内存泄漏 : no solution so far,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19570276/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com