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

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

Куда девается памаять?


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 сдесь лишние.


Наверх

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