![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Функция скриншота кушает память
hoolio © (2011-10-19 09:13:00)Помогите исправить, если запустить в цикле, память быстро скушивается. Очистка не проходит?
function GetScreenShot(PixelFormat:TPixelFormat;Width,Height:Integer): TBitmap;
var
Desktop: HDC;
begin
Result := TBitmap.Create;
Desktop := GetDC(0);
try
try
Result.PixelFormat := PixelFormat;
Result.Width := Width;
Result.Height := Height;
BitBlt(Result.Canvas.Handle, 0, 0, Result.Width, Result.Height, Desktop, 0, 0, SRCCOPY);
Result.Modified := True;
finally
ReleaseDC(0, Desktop);
end;
except
Result.Free;
Result := nil;
end;
end;
Dimka Maslov (2011-10-19 19:03:00) [1]
> Зачем их снимать, если битмап сразу же уничтожается.
Подвиг царя Сизифа вдохновляет многих и в нашу годину суровых нанотехнологий.
Anatoly Podgoretsky (2011-10-19 14:18:00) [2]> Dimka Maslov (19.10.2011 13:19:07) [7]
Зачем их снимать, если битмап сразу же уничтожается.
скриншот (2011-10-19 13:42:00) [3]дайте пожрать,нелюди
Dimka Maslov (2011-10-19 13:19:00) [4]
> Anatoly Podgoretsky © (19.10.11 12:54) [6]
Смысл действа в снятии скриншотов, а не в их последующем использовании.
Anatoly Podgoretsky (2011-10-19 12:54:00) [5]Но в приведеном коде, освобождение только при ошибке.
А вот в коде
bmp_scr:=GetScreenShot(pf24Bit,screen.Width,screen.Height);
bmp_scr.free;
Первая функия бессмыленна.
hoolio (2011-10-19 10:40:00) [6]Да, вы правы, вопрос решил, переписал все функции в одну процедуру, теперь освобождается память.
sniknik (2011-10-19 10:02:00) [7]> Вот так забивает память очень быстро, буквально за несколько минут
> While true do
> GetScreenShot(pf24Bit,screen.Width,screen.Height);
> А полученные объекты класса TBitmap таки освобождаются где-нибудь?
тебя же спросили.
вот так проверяй
While true do
GetScreenShot(pf24Bit,screen.Width,screen.Height). Free;
хотя, тут еще зависит от того где и как мерять... винда не всегда память при освобождении "перетасовывает" чтобы в кучу вернуть.
hoolio (2011-10-19 09:57:00) [8]Видимо действительно дело не в функции, а в последующей очистке.
Попробую разобраться.
hoolio (2011-10-19 09:52:00) [9]Дело в функции, так как при вызове идет забивка памяти
Вот так забивает память очень быстро, буквально за несколько минут
While true do
GetScreenShot(pf24Bit,screen.Width,screen.Height);
В коде освобождаются вот так:
var
bmp_scr:TBitmap;
begin
bmp_scr:=GetScreenShot(pf24Bit,screen.Width,screen.Height);
bmp_scr.free;
Так что дело в функции. Где утечка?
Dimka Maslov (2011-10-19 09:40:00) [10]А полученные объекты класса TBitmap таки освобождаются где-нибудь?