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

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

Как высвободить память занимаемую TWebBrowser'ом [D7, WinXP]


JanMihail ©   (2007-08-02 17:06:00) 

Вот такой простой код:
IE: array of TWebBrowser; //Масси веб-броузеров
....

/////////Кнопка создания браузеров////////////////
procedure TForm1.Button1Click(Sender: TObject);
var
 i: Integer;
begin
 SetLength(IE, 500);//Задаем размерность массиву

 for i := 0 to length(IE) - 1 do
 begin
   IE[i] := TWebBrowser.Create(Self);       //Инициализируем браузер
   IE[i].ParentWindow := Form1.Handle;    //Задаем родителя
   IE[i].Navigate(<ссылка на страницу>);//Грузим страницу
 end;
end;

/////////////Кнопка уничтожения браузеров///////////
procedure TForm1.Button2Click(Sender: TObject);
var
 i: Integer;
begin
 for i := 0 to length(IE) - 1 do
 begin
   IE[i].Stop;//Останавливаем загрузку
   IE[i].Free;//Уничтожаем браузер
   IE[i] := nil;//Очищаем ячейку массива
 end;
 IE := nil;//Очищаем весь массив
end;


Нажимаю на Button1 - создалось 500 браузеров и каждый грузит указанную страницу, затем нажимаю Button2 - все браузеры с формы удалились, а память высвободилась не вся. Как сделать чтоб высвободилась вся память занимаемая ими???


JanMihail   (2007-08-03 10:59:00) [1]

Может у кого есть какие мысли. Пробовал так:

ProcedureTfrmMain.btnEmptyCacheClick( Sender : TObject );
Var   
 lpEntryInfo : PInternetCacheEntryInfo;    
 hCacheDir   : LongWord;    
 dwEntrySize : LongWord;    
 dwLastError : LongWord;
Begin   
 dwEntrySize := 0;    
 FindFirstUrlCacheEntry( NIL, TInternetCacheEntryInfo( NIL^ ), dwEntrySize );    
 GetMem( lpEntryInfo, dwEntrySize );    
 hCacheDir := FindFirstUrlCacheEntry( NIL, lpEntryInfo^, dwEntrySize );    

  If( hCacheDir <> 0 ) Then       
   DeleteUrlCacheEntry( lpEntryInfo^.lpszSourceUrlName );    

 FreeMem( lpEntryInfo );    

  Repeat       
   dwEntrySize := 0;        
   FindNextUrlCacheEntry( hCacheDir, TInternetCacheEntryInfo( NIL^ ), dwEntrySize );        
   dwLastError := GetLastError();  
     
    If( GetLastError = ERROR_INSUFFICIENT_BUFFER ) Then
   Begin            
     GetMem( lpEntryInfo, dwEntrySize );            
      If( FindNextUrlCacheEntry( hCacheDir, lpEntryInfo^, dwEntrySize ) ) Then               
       DeleteUrlCacheEntry( lpEntryInfo^.lpszSourceUrlName );            
     FreeMem(lpEntryInfo);        
    End;   
  Until( dwLastError = ERROR_NO_MORE_ITEMS );
End;

Видать это не то. Не помогло вообще. Ну подскажите кто может!


JanMihail   (2007-08-02 21:57:00) [2]


> Zagaevskiy ©   (02.08.07 20:58) [11]

Что упал?? Ты с чем-то спутал!


Zagaevskiy   (2007-08-02 20:58:00) [3]


> Прогу для увеличения показа баннеров

хм.. только дошло : ты ж её уже недели две делаешь?


Zagaevskiy   (2007-08-02 20:45:00) [4]

Ага приехал. А нащёт показа баннеров - это шулерство.
Не совсем помогло это как?


JanMihail   (2007-08-02 20:06:00) [5]


> aktuba   (02.08.07 19:39) [7]

Спасибо! Но не совсем помогло!


> Zagaevskiy ©   (02.08.07 19:42) [8]

Нет не спамовик. Прогу для увеличения показа баннеров. А ты дома? Или еще не приехал?


Zagaevskiy   (2007-08-02 19:42:00) [6]


> JanMihail ©   (02.08.07 19:11) [6]

Привет! Чё опять спамовик пишешь? :))


aktuba   (2007-08-02 19:39:00) [7]

Всего 500??? Маловато будет... Давай 500 000, тогда нормально будет!

А насчет освобождения - WebBrowser не сразу освобождает память. Это раз. Второе - вместо IE := nil сделай SetLength(IE, 0).


JanMihail   (2007-08-02 19:11:00) [8]


> Плохиш ©   (02.08.07 18:01) [5]

Свернул и развернул и не удивился.


Плохиш   (2007-08-02 18:01:00) [9]


> JanMihail ©   (02.08.07 17:06)  

Сверни и разверни свою прогу и удивись...


JanMihail   (2007-08-02 17:46:00) [10]

что вы спрашиваете: что так мало? Что так много? Я же спросил как высвободить память


clickmaker   (2007-08-02 17:43:00) [11]


> Нажимаю на Button1 - создалось 500 браузеров

а чё так мало?


Yanis   (2007-08-02 17:08:00) [12]


> создалось 500 браузеров и каждый грузит указанную страницу

Ужас какой O_o


Dib@zol   (2007-08-02 17:08:00) [13]

в "кладовке" есть оч рульная прога "FreeMem". Скачай, встрой код себе в прогу - и память освободишь, и фичу ещё одну к проге добавишь :))


Наверх

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