我的应用程序使用加载网页的 TWebBrowser。问题是,关闭包含 TWebBrowser 的表单后,使用的内存没有释放。如果我打开和关闭表单,内存只会不断增加。
看到一些关于调用 SetProcessWorkingSetSize() 或 CoFreeUnusedLibrariesEx() 来解决这个问题的帖子,但我不确定这些是否是正确的解决方案。
知道如何释放 TWebBrowser 使用的内存吗?
我正在使用 StackOverflow 中的此代码(如何从 TWebBrowser 获取 HTML 源代码)来获取网页的完整响应:
function TMain.GetWebBrowserHTML(const WebBrowser: TWebBrowser): String;
var
LStream: TStringStream;
Stream: IStream;
LPersistStreamInit: IPersistStreamInit;
begin
if not Assigned(WebBrowser.Document) then
Exit;
LStream := TStringStream.Create('');
try
LPersistStreamInit := WebBrowser.Document as
IPersistStreamInit;
Stream := TStreamAdapter.Create(LStream, soReference);
LPersistStreamInit.Save(Stream, True);
Result := LStream.DataString;
finally
LStream.Free();
end;
end;
Run Code Online (Sandbox Code Playgroud)
在使用一些大型网页对例程进行数百次调用后,我的内存不足。
显然,组件的Document属性存在一个已知问题,但替换为WebBrowser.Documentwith的建议WebBrowser.DefaultInterface.Document无济于事。我真的不想尝试修复 VCL,Release如果我知道在哪里以及如何做的话,另一个调用的建议可能会奏效。泄漏可能完全是另一回事。此代码高于我的工资等级。
TIdHTTP由于必须编写一些脚本,我无法使用,无论如何我都需要视觉效果。