使用 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,如果我运行这么多次,这可能会导致内存泄漏。
非常感谢