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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.06.2011, 20:13   #1
Florento
Пользователь
 
Регистрация: 05.02.2011
Сообщений: 35
По умолчанию Скриншот в Image

Программа работает в цикле и каждую секунду делает скриншот из WebBrowser, сохраняет на жесткий диск, потом загружает в Image. Зашел в процессы, и увидел что программа постоянно увелечивает расход оперативной памяти. Начиная с 200 мб доходило до 1 гб. Чем больше работает, тем больше грузит.

Как можно почистить оперативную память? Сделать так, чтобы после очердного скриншота и загрузки его в image, программа освобождала память, которую использовала? Скриншот делается функцией:

Код:
procedure WebBrowserScreenShot(const wb: TWebBrowser; const fileName: TFileName);
var
viewObject : IViewObject;
r : TRect;
bitmap : TBitmap;
begin
if wb.Document <> nil then
  begin
    wb.Document.QueryInterface(IViewObject, viewObject) ;
    if Assigned(viewObject) then
      bitmap := TBitmap.Create;
      r := Rect(0, 0, wb.Width, wb.Height) ;
      bitmap.Height := wb.Height;
      bitmap.Width := wb.Width;
      viewObject.Draw(DVASPECT_CONTENT, 1, nil, nil, Application.Handle, bitmap.Canvas.Handle, @r, nil, nil, 0) ;
      bitmap.SaveToFile(filename);
      bitmap.Free;
      viewObject._Release;
end;
end;
Florento вне форума Ответить с цитированием
Старый 21.06.2011, 23:19   #2
volod3000
Форумчанин
 
Аватар для volod3000
 
Регистрация: 18.12.2008
Сообщений: 266
По умолчанию

Попробуйте эту процедуру:

uses Windows, SysUtils;

Код:
procedure TrimWorkingSet;
var
MainHandle: THandle;
begin
if Win32Platform = VER_PLATFORM_WIN32_NT then
begin
MainHandle := OpenProcess(PROCESS_ALL_ACCESS, false, GetCurrentProcessID);
SetProcessWorkingSetSize(MainHandle, DWORD(-1), DWORD(-1));
CloseHandle(MainHandle);
end;
end;

Мало открыть человеку глаза, большинство еще просит указать дорогу и ждет волшебного пенделя.
volod3000 вне форума Ответить с цитированием
Старый 22.06.2011, 02:36   #3
Florento
Пользователь
 
Регистрация: 05.02.2011
Сообщений: 35
По умолчанию

а когда ее вызывать?
Florento вне форума Ответить с цитированием
Старый 22.06.2011, 12:49   #4
volod3000
Форумчанин
 
Аватар для volod3000
 
Регистрация: 18.12.2008
Сообщений: 266
По умолчанию

Цитата:
Сообщение от Florento Посмотреть сообщение
а когда ее вызывать?
Можно попробовать в конце Вашей процедуры .

Мало открыть человеку глаза, большинство еще просит указать дорогу и ждет волшебного пенделя.
volod3000 вне форума Ответить с цитированием
Старый 22.06.2011, 20:18   #5
Florento
Пользователь
 
Регистрация: 05.02.2011
Сообщений: 35
По умолчанию

Спасибо, помогло.
Florento вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скриншот Andrey770 Паскаль, Turbo Pascal, PascalABC.NET 5 05.06.2011 17:47
EPNGMissingMultipleIDAT. This PNG Image is invalid because it has missing image parts kardinal94 Общие вопросы Delphi 0 08.10.2010 20:31
Вопрос по Image (скачанная картинка не хочет выводиться в Image) Radnor Мультимедиа в Delphi 2 06.07.2009 02:20
Скриншот ForzaJuve Win Api 13 05.10.2008 21:27