![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Рост памяти с TWebBrowser
dmitry kholl © (2006-10-23 13:11:00)Я в рантайме креирую компонент браузера.
var
Document: IHTMLDocument2;
V: OleVariant;
//...
ABrowser:= TWebBrowser.Create(AParent);
ABrowser.ParentWindow := AParent.Handle;
ABrowser.Width := AParent.Width;
ABrowser.Height := AParent.Height;
ABrowser.Align := alClient;
ABrowser.Navigate('about:blank');
while (ABrowser.Document = nil) do;
Document := ABrowser.Document as IHtmlDocument2;
V := VarArrayCreate([0, 0], varVariant);
V[0] := 'BLA-BLA-BLA';
Document.Write(PSafeArray(TVarData(v).VArray));
Document.Close;
Код удаления компонента.
if ABrowser <> nil
then FreeAndNil(ABrowser);
Провожу серию созданий и удалений компонента.
При первом создании память резко выростает - создается компонент первый раз, и при удалении не освобождается эта память.
При повторном создании такого резкого скачка уже нет, но после метода
Navigate память выростает и по немногу не освобождается.
Как добиться нормального освобождения памяти?
dmitry kholl (2006-10-23 15:11:00) [1]Для того что бы разобраться с этой проблеммой, в большом проэкте это серьезная уже утечка памяти, я сделал тестовый пример.
На форме две кнопки:
1 - создает и загружает компонент
2 - разрушает его.
Как тестировал.
Ручками нажимаю, то на одну, то на вторую. Записываю показания памяти для процесса программы.
До создания компонента После его создания
//первый значительны прирост памяти при первом создании
3440 8904
// последующий рост (первый столбик -это после разрущения компонента)
8844 8956
8864 9004
8916 9040
8972 9076
Gero (2006-10-23 14:52:00) [2]>
> Код удаления компонента.
>
> if ABrowser <> nil
> then FreeAndNil(ABrowser);
А где ты его вызываешь?
dmitry kholl (2006-10-23 14:38:00) [3]Если убрать ABrowser.Navigate('about:blank');
ну и соответсвенно код загрузки, то память только при первом создании занимается, но нет небольшого прироста памяти при следующих созданиях и разрушениях компонента.
dmitry kholl (2006-10-23 14:32:00) [4]> ты уверен что память не освобождается?
Я просто привел пример кода, которым я создаю и разрушаю.
Free точно вызывается.
Dmitrij_K (2006-10-23 13:24:00) [5]
try
xxx.Create
finally
xxx.Free
end
> Как добиться нормального освобождения памяти?
ты уверен что память не освобождается?