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

Вниз

Функция скриншота кушает память   Найти похожие ветки 

 
hoolio   (2011-10-19 09:13) [0]

Помогите исправить, если запустить в цикле, память быстро скушивается. Очистка не проходит?
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 09:40) [1]

А полученные объекты класса TBitmap таки освобождаются где-нибудь?


 
hoolio   (2011-10-19 09:52) [2]

Дело в функции, так как при вызове идет забивка памяти

Вот так забивает память очень быстро, буквально за несколько минут
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;


Так что дело в функции. Где утечка?


 
hoolio   (2011-10-19 09:57) [3]

Видимо действительно дело не в функции, а в последующей очистке.
Попробую разобраться.


 
sniknik ©   (2011-10-19 10:02) [4]

> Вот так забивает память очень быстро, буквально за несколько минут
> While true do
> GetScreenShot(pf24Bit,screen.Width,screen.Height);

> А полученные объекты класса TBitmap таки освобождаются где-нибудь?

тебя же спросили.

вот так проверяй
While true do
 GetScreenShot(pf24Bit,screen.Width,screen.Height).Free;


хотя, тут еще зависит от того где и как мерять... винда не всегда память при освобождении "перетасовывает" чтобы в кучу вернуть.


 
hoolio   (2011-10-19 10:40) [5]

Да, вы правы, вопрос решил, переписал все функции в одну процедуру, теперь освобождается память.


 
Anatoly Podgoretsky ©   (2011-10-19 12:54) [6]

Но в приведеном коде, освобождение только при ошибке.

А вот в коде

bmp_scr:=GetScreenShot(pf24Bit,screen.Width,screen.Height);
bmp_scr.free;


Первая функия бессмыленна.


 
Dimka Maslov ©   (2011-10-19 13:19) [7]


> Anatoly Podgoretsky ©   (19.10.11 12:54) [6]


Смысл действа в снятии скриншотов, а не в их последующем использовании.


 
скриншот   (2011-10-19 13:42) [8]

дайте пожрать,нелюди


 
Anatoly Podgoretsky ©   (2011-10-19 14:18) [9]

> Dimka Maslov  (19.10.2011 13:19:07)  [7]

Зачем их снимать, если битмап сразу же уничтожается.


 
Dimka Maslov ©   (2011-10-19 19:03) [10]


> Зачем их снимать, если битмап сразу же уничтожается.


Подвиг царя Сизифа вдохновляет многих и в нашу годину суровых нанотехнологий.



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

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

Наверх




Память: 0.49 MB
Время: 0.006 c
15-1370631977
NanoWeber
2013-06-07 23:06
2013.11.24
форумы нано


2-1360825301
alexdn
2013-02-14 11:01
2013.11.24
Раскрасить цвет выделения в Rich Edit


15-1369857276
ClawClaw
2013-05-29 23:54
2013.11.24
Потрясающая память!


2-1354134587
toropoff
2012-11-29 00:29
2013.11.24
DirectShow Filters - DirectSound - set audio device


15-1370782436
картман
2013-06-09 16:53
2013.11.24
книжка