Текущий архив: 2006.12.03;
Скачать: CL | DM;
Вниз
Рост памяти с TWebBrowser Найти похожие ветки
← →
dmitry kholl (2006-10-23 13:11) [0]Я в рантайме креирую компонент браузера.
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 память выростает и по немногу не освобождается.
Как добиться нормального освобождения памяти?
← →
Dmitrij_K (2006-10-23 13:24) [1]
try
xxx.Create
finally
xxx.Free
end
> Как добиться нормального освобождения памяти?
ты уверен что память не освобождается?
← →
dmitry kholl (2006-10-23 14:32) [2]> ты уверен что память не освобождается?
Я просто привел пример кода, которым я создаю и разрушаю.
Free точно вызывается.
← →
dmitry kholl (2006-10-23 14:38) [3]Если убрать ABrowser.Navigate("about:blank");
ну и соответсвенно код загрузки, то память только при первом создании занимается, но нет небольшого прироста памяти при следующих созданиях и разрушениях компонента.
← →
Gero © (2006-10-23 14:52) [4]>
> Код удаления компонента.
>
> if ABrowser <> nil
> then FreeAndNil(ABrowser);
А где ты его вызываешь?
← →
dmitry kholl (2006-10-23 15:11) [5]Для того что бы разобраться с этой проблеммой, в большом проэкте это серьезная уже утечка памяти, я сделал тестовый пример.
На форме две кнопки:
1 - создает и загружает компонент
2 - разрушает его.
Как тестировал.
Ручками нажимаю, то на одну, то на вторую. Записываю показания памяти для процесса программы.
До создания компонента После его создания
//первый значительны прирост памяти при первом создании
3440 8904
// последующий рост (первый столбик -это после разрущения компонента)
8844 8956
8864 9004
8916 9040
8972 9076
Страницы: 1 вся ветка
Текущий архив: 2006.12.03;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.036 c