![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Куда девается памаять?
ZENsan © (2008-04-25 12:50:00)Подскажите с проблемой...все работает, но не очень хорошо.. что я не так делаю - почему память занимаемая процессом растёт в арифметической прогрессии...
program ProjectА;
{$APPTYPE CONSOLE}
uses
Forms,
ActiveX,
OleCtrls,
SHDocVw;
var
Web: TWebBrowser;
i: Integer;
frm: TForm;
begin
Application.Initialize;
CoInitialize(nil);
i := 0;
frm := TForm.Create(nil);
frm.Visible := False;
repeat
Web := TWebBrowser.Create(nil);
Web.ParentWindow := frm.Handle;
Web.Visible := False;
Web.Hide;
Application.ProcessMessages;
Web.HandleNeeded;
Web.Navigate(' http://www.google.ru');
repeat
Application.ProcessMessages;
until Web.ReadyState = READYSTATE_COMPLETE;
Web.Free;
i := i + 1;
WriteLn(i);
until i = 100;
frm.Free;
end.
ZENsan (2008-04-25 13:26:00) [1]Спасибо sniksnik, мне просто в голово не могло придти, что надо СТОП вызывать, когда статус законченный... Но памаять куда-то всё равно просачивается..
ZENsan (2008-04-25 13:24:00) [2]Во! Stop... Память хотя и нарастает, но теперь в 10 раз медленнее...
где-то по 100 Кб на 100 navigate...
ZENsan (2008-04-25 13:22:00) [3]Да, пробовал... но на Web.Quit; вообще выдаёт Unspecified error. Этот quit, наверное надо вызывать когда ready_state не completed.
sniknik (2008-04-25 13:20:00) [4]> Web.Free;
> Web := nil;
> ?
скорее
Web.Close/Quit/Stop/ чтото подобное.
Web.Free;
ZENsan (2008-04-25 13:20:00) [5]Эта прога просто пример, который ведёт себя подобным образом..
Может я неверно как-то создаю чего-то... или ещё что. Вы же меня знаете :)
ZENsan (2008-04-25 13:19:00) [6]Слееп не идет, попробовал.. Не загружает..
> 2. А что ты вообще делаешь?
Просто прога бровсит адреса например. И при этом занимаемая ею память только приростает и не убывает никогда...
sniknik (2008-04-25 13:17:00) [7]> sleep-а в цикле должно хватить.
сам проверить не могу, у нас сеть с прокси, может от этого, может нет, но у меня статуса READY не получает вообще, т.е. вешается (разбираться с что ему там нужно не хочется).
Ega23 (2008-04-25 13:16:00) [8]
Web.Free;
Web := nil;
?
Ega23 (2008-04-25 13:15:00) [9]1. Не вижу ни одного try..except и try..finally.
2. А что ты вообще делаешь?
sniknik (2008-04-25 13:14:00) [10]> браузер не успевает загрузить страницу вообще.
sleep-а в цикле должно хватить.
> Это же не мой объект TWebBrowser.. как я там обработку сообшений напишу?
в нем и не надо. кстати это ole-контрол, т.е. обертка над активх обьектом, который стартует но не завершается (сам обьект, а не обертка) вот отсюда наверняка и утечка.
ZENsan (2008-04-25 13:09:00) [11]Это же не мой объект TWebBrowser.. как я там обработку сообшений напишу?
Я просто даже по другому не умею..
ZENsan (2008-04-25 13:07:00) [12]Я пробовал и в приложении форм это делать... тоже памаять только прибывает и прибывает... и никуда не освобождается..
ZENsan (2008-04-25 13:06:00) [13]Косоль здесь только для дебага.. чтобы выводить i
ZENsan (2008-04-25 13:05:00) [14]Формс и Аппликатион обйекты мне нужны, они это реализуют - зачем?
Но суть-то вопроса - куда память уходит?
ZENsan (2008-04-25 13:04:00) [15]Эсли не писать это, то просто ничего на пашет. браузер не успевает загрузить страницу вообще.
sniknik (2008-04-25 13:02:00) [16]+
в консольных приложениях если нужен цикл выборки сообщений то его прям там и пишут.
sniknik (2008-04-25 12:57:00) [17]Application.ProcessMessages; как и весь Application сдесь лишние.