IHTMLDocument (IHTMLDocument2) を使用した後にメモリを解放する方法はありますか?
現在、EmptyWorkingSet関数を使用していますが、それは良い方法ではないと感じています
EmptyWorkingSet(GetCurrentProcess);
TWebBrowser を解放しても役に立ちません。問題は、メモリから解放されていない IHTMLDocument COM クラスにあるようです。それを解放する明確な方法はありますか?Marshal.ReleaseComObjectのようなものですが、Delphi で利用できますか?
JavaScript を実行するよりも少ないメモリ損失で再現可能ですが、それでもなお. フォームの上部に2つのボタンを配置して、次のコードを試してみると...
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 になり、これを何度も実行するとメモリ リークが発生する可能性があります。
どうもありがとう