мне нужно получить доступ к IHTMLDocument2 при работе в потоке,
пробывал так:
procedure Leak2;
var
IDoc: IHTMLDocument2;
v: Variant;
HTML: String;
begin
try
HTML:=Form1.IdHttp1.Get('http://localhost/01.html');
IDoc:=CreateComObject(Class_HTMLDOcument) as IHTMLDocument2;
v:=VarArrayCreate([0,0],VarVariant);
v[0]:= HTML;
IDoc.write(PSafeArray(System.TVarData(v).VArray));
finally
IDoc:=nil;
end;
и второй(пожарный)вариант (от отчаянья)
в потоке незнаю как заставить работать
procedure leak1;
var
V: OleVariant;
HtmlDoc: IHTMLDocument2;
HTML: String;
begin
HTML:=Form1.IdHttp1.Get('http://localhost/01.html');
Form1.WB.Silent:=True;
Form1.WB.Visible:=False;
Form1.WB.Navigate('about:blank');
HtmlDoc := Form1.WB.Document as IHtmlDocument2;
V := VarArrayCreate([0, 0], varVariant);
V[0] := HTML;
HtmlDoc.Write(PSafeArray(TVarData(v).VArray));
HtmlDoc.Close;
end;
Запустил каждую процедуры в цикле от 0 до 999 по очереди.
в первом варианте (с COM) последний цикл выполнялся 3.9 сек, программа занимала в памяти 44 636 К
во втором варианте последний цикл выполнялся уже 4.8 сек, но программа занимала в памяти 17 636 К (что более близко к начальному кол-ву занимаемой памяти)
Вопрос: почему возникают такие тормоза при выполнении простейших процедур, куда девается память и как ее вернуть?
уже несколько дней вопрос висит на delphimasters, но предложили только вариант с TWebBrowser'ом (процедура leak1)