Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.08.26;
Скачать: CL | DM;

Вниз

Как высвободить память занимаемую TWebBrowser ом   Найти похожие ветки 

 
JanMihail ©   (2007-08-02 17:06) [0]

Вот такой простой код:
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 - все браузеры с формы удалились, а память высвободилась не вся. Как сделать чтоб высвободилась вся память занимаемая ими???


 
Yanis ©   (2007-08-02 17:08) [1]


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

Ужас какой O_o


 
Dib@zol ©   (2007-08-02 17:08) [2]

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


 
clickmaker ©   (2007-08-02 17:43) [3]


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

а чё так мало?


 
JanMihail ©   (2007-08-02 17:46) [4]

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


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


> JanMihail ©   (02.08.07 17:06)  

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


 
JanMihail ©   (2007-08-02 19:11) [6]


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

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


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

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

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


 
Zagaevskiy ©   (2007-08-02 19:42) [8]


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

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


 
JanMihail ©   (2007-08-02 20:06) [9]


> aktuba   (02.08.07 19:39) [7]

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


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

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


 
Zagaevskiy ©   (2007-08-02 20:45) [10]

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


 
Zagaevskiy ©   (2007-08-02 20:58) [11]


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

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


 
JanMihail ©   (2007-08-02 21:57) [12]


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

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


 
JanMihail ©   (2007-08-03 10:59) [13]

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

Procedure TfrmMain.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;

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



Страницы: 1 вся ветка

Текущий архив: 2007.08.26;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.016 c
2-1185777100
johntemp
2007-07-30 10:31
2007.08.26
TExcelApplication в Delphi 3?


1-1181823351
BlackCat
2007-06-14 16:15
2007.08.26
TDataTimePicker ы в строках StringGrida


1-1181746451
Alex_C
2007-06-13 18:54
2007.08.26
Обращение к ф-цииDLL одновременно из нескольких процессов


2-1185038984
Ivolg
2007-07-21 21:29
2007.08.26
TCPServer и TCPClient


2-1186288632
zxs
2007-08-05 08:37
2007.08.26
подксажите в чем ошибка