![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как высвободить память занимаемую 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". Скачай, встрой код себе в прогу - и память освободишь, и фичу ещё одну к проге добавишь :))