gpt4 book ai didi

delphi - 如何释放IHTMLDocument使用的内存?

转载 作者:行者123 更新时间:2023-12-03 15:31:26 31 4
gpt4 key购买 nike

使用IHTMLDocument(IHTMLDocument2)后有没有办法释放内存?

目前我正在使用EmptyWorkingSet功能,但我觉得这不是一个好方法

EmptyWorkingSet(GetCurrentProcess);

即使释放 TWebBrowser 也无济于事;问题似乎出在 IHTMLDocument COM 类中,该类未从内存中释放。有没有明确的释放方式;类似 Marshal.ReleaseComObject但可用于 Delphi 吗?

与运行 JavaScript 相比,它是可重现的,内存损失更少,但仍然如此。如果您在表单顶部放置两个按钮并尝试以下代码...

uses MSHTML, SHDocVw;

type
TForm1 = class(TForm)
private
WebBrowser: TWebBrowser;
HTMLDocument: IHTMLDocument2;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
WebBrowser := TWebBrowser.Create(nil);
TWinControl(WebBrowser).Parent := Self;
WebBrowser.SetBounds(8, 39, ClientWidth-16, ClientHeight-47);
WebBrowser.Navigate('http://maps.google.com/');
HTMLDocument := WebBrowser.Document as IHTMLDocument2;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
WebBrowser.Free;
HTMLDocument := nil;
end;

每次 WebBrowser 释放后,您都会看到内存丢失。当我运行 JavaSrcipt 时,它甚至超过 300 kB,约为 1 MB,如果我运行这么多次,这可能会导致内存泄漏。

非常感谢

最佳答案

当您释放对 COM 类的所有引用时,通常应该释放它们。通常,这可以通过将 nil 分配给所有持有其接口(interface)引用的变量来完成。

要立即释放 COM DLL 使用的内存,您可以使用 CoFreeUnusedLibrariesEx .

关于delphi - 如何释放IHTMLDocument使用的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6051437/

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