Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2010, 14:53   #1
delphi-proger
Новичок
Джуниор
 
Регистрация: 24.11.2009
Сообщений: 1
По умолчанию Как чистить память. я - чайник :)

Как сделать так, что бы через определенное кол-во num_loads, т.е. после определенного кол-ва переходов по ссылкам взятых из ViewPageLinks вся память чистилась и цикл продолжался дальше без мусора в памяти?
Код:
...
  TThread2 = class(TThread)
    U_EmbeddedWB: TEmbeddedWB;
    X1_EmbeddedWB: TEmbeddedWB;
    url1: string;
    link: string;
    num_loads: integer;
    tt1: tstringlist;
    tt0: tstringlist;
   private
   public
     constructor Create(url0:string; XEmbeddedWB:TEmbeddedWB); overload;
   protected
     procedure Execute; override;
     procedure ViewPageLinks;
     procedure Navigate;
  end;
...
constructor TThread2.Create(url0:string; XEmbeddedWB:TEmbeddedWB);
begin
  url1:=url0;
  Create(true);
  FreeOnTerminate := True;
  Priority := tpLower;
  X1_EmbeddedWB:=XEmbeddedWB;
  U_EmbeddedWB:=TEmbeddedWB.Create(XEmbeddedWB);
  U_EmbeddedWB.Parent:= XEmbeddedWB;
  U_EmbeddedWB.Visible:=true;
  U_EmbeddedWB.VisualEffects.Destroy;
  U_EmbeddedWB.DownloadOptions:=[DontExecuteActiveX, DontExecuteScripts, DontExecuteJava,
                       DontDownloadBehaviors, DontPerformClientPull];
  tt0:=TstringList.Create;
  Resume;
end;

procedure TThread2.Execute;
var
 i:integer;
 new_url:string;
begin
  while not terminated do
  begin
    U_EmbeddedWB.Navigate('http://'+url1);
    U_EmbeddedWB.WaitWhileBusy(10000);
    U_EmbeddedWB.Wait(10000);
    Synchronize(ViewPageLinks);
    if tt0.count > 1 then
    begin
      for i:=0 to tt0.Count-1 do
      begin
        link := tt0[i];
        Synchronize(Navigate);
        U_EmbeddedWB.WaitWhileBusy(10000);
        U_EmbeddedWB.Wait(10000);
        U_EmbeddedWB.ClearCache;
        U_EmbeddedWB.ClearTypedUrls;
        U_EmbeddedWB.ClearHistory;
        U_EmbeddedWB.DestroyComponents;
        if num_loads > 5 then
        begin

          // дальше всё рушится и вылазит ошибка

          U_EmbeddedWB.Destroy;
          U_EmbeddedWB:=TEmbeddedWB.Create(X1_EmbeddedWB);
          U_EmbeddedWB.Parent:= X1_EmbeddedWB;
        end;
      end;
    end;
  end;
end;

procedure TThread2.ViewPageLinks;
begin
  tt0.clear;
  U_EmbeddedWB.ViewPageLinksToStrings(tt0);
end;

procedure TThread2.Navigate;
begin
  num_loads:=num_loads+1;
  U_EmbeddedWB.Navigate(link);
end;

Последний раз редактировалось delphi-proger; 24.02.2010 в 14:55.
delphi-proger вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Роботостроение. (Чайник) Web-Gangsta Свободное общение 3 07.02.2010 19:11
Как выделить память 750mb? VintProg Общие вопросы Delphi 10 29.06.2009 20:30
Как вернуть виртуаньную память??? Александр! Помощь студентам 8 12.01.2009 12:45
Как увеличить память jvm на netbeans? kudaybaha Общие вопросы по Java, Java SE, Kotlin 0 30.10.2008 20:42
Как чистить оперативную память??? Altera Операционные системы общие вопросы 10 16.05.2008 14:52