我的应用程序使用加载网页的TWebBrowser。问题是,在关闭包含TWebBrowser的表单之后,使用的内存没有被释放。如果我打开和关闭表单,内存就会不断增加。
我看到了一些关于调用SetProcessWorkingSetSize()或CoFreeUnusedLibrariesEx()来解决这个问题的帖子,但我不确定其中是否有正确的解决方案。
你知道如何释放TWebBrowser使用的内存吗?
发布于 2014-07-31 04:22:53
QC#106829描述了TWebBrowser内存泄漏的一个可能原因。访问Document (以及通过TOleControl.GetIDispatchProp或TOleControl.GetIUnknownProp实现的任何其他属性)会导致泄漏,因为它调用AddRef而不调用Release。作为一种解决方法,您可以手动调用Release,或者可以修补VCL (see here),或者可以避免有问题的属性(例如,使用browser.DefaultInterface.Document而不是browser.Document)。
发布于 2012-04-20 01:04:57
使用TWebBrowser可以在幕后完成大量工作,与完整的Internet Explorer实例所做的工作大同小异。它对你来说是隐藏的,但它仍然在那里,我们很可能无法从内存中强行删除它。检查页面加载之前和之间的内存使用情况,并测试调用Navigate('about:blank');时发生的情况。还要检查析构函数是否被正确调用,并考虑从OnClose或OnCloseQuery调用Navigate('about:blank');。我发现这确实对记忆状况有一点帮助。
发布于 2018-06-17 00:25:27
最好的解决方案是停止使用TWebbrowser。
CEF4Delphi是一个免费的库,使用的是Chrome而不是is。始终保持最新状态,并且非常高效:
https://stackoverflow.com/questions/10224801
复制相似问题