есть ли способ освободить память после использования IHTMLDocument (IHTMLDocument2)?
В настоящее время я использую функцию EmptyWorkingSet , но мне кажется, что это не очень хороший способ сделать это
EmptyWorkingSet(GetCurrentProcess);
Даже освобождение TWebBrowser не помогает;Кажется, проблема в COM-классе IHTMLDocument, который не освобождается из памяти.Есть ясный способ выпустить это;что-то вроде 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 кБ, это около 1 МБ, и это может вызвать утечку памяти в случае, если я запускаю это много раз.
Большое спасибо