Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Рост памяти с 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



> Как добиться нормального освобождения памяти?

ты уверен что память не освобождается?


Наверх

Титульная страница Поиск, карта сайта Написать письмо