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

Вниз

Переполнение памяти   Найти похожие ветки 

 
-matrix- ©   (2006-01-14 21:53) [0]

В программе используются функции типом Tbitmap. На протяжении долгой работы программа постепенно поедает всю оперативную память (;. Мне кажется, что это из-за невозможности реализовать у функции ".free". Как это можно исправить без введения новых типов Tbitmap?
PS Просто это удобно - canvas.draw(0,0,graph), где graph - это та самая функция.


 
з. танька   (2006-01-14 21:57) [1]

напиши свою маленькую процедуру что то типа

procedure CanvasDraw(x,y: integer; canvas: TCanvas);
var
 bmp: TBitMap;
begin
 bmp := graph;
 canvas.draw(x,y,bmp);
 bmp.Destroy;
end;


 
-matrix- ©   (2006-01-14 22:05) [2]

напиши свою маленькую процедуру что то типа

Не-а! Пробовал еще раньше. Это тоже не идет.
И, в таком уж случае, мне легче саму функцию модифицировать в процедуру с параметром "var bm:Tbitmap" и перед каждым ее вызовом создавать временный битмап и его уничтожать. Мне-ж что-то оригинальное надо (;
PS Быстро-то у вас отвечают...


 
з. танька   (2006-01-14 22:17) [3]


> Не-а! Пробовал еще раньше. Это тоже не идет.

похоже видала я эту функцию. не поворачивает ли она картинку на заданный угол? функция косячная с delphiworld, она создавала два битмапа, один возвращала в результате, а другой просто-так оставался болтаться в памяти. так что через некоторое время прога действительно съедала всю память. дело в том что в моем-то примере утечки нету.. только если функция виновата..

> PS Быстро-то у вас отвечают...

бессонница у меня, да...


 
VirEx ©   (2006-01-14 22:20) [4]

используй только один экземпляр Tbitmap, а в функциях работай через указатели:
function getBitmap:Pointer;
var
b:TBitmap
begin
...
b:=TBitmap.create();
b.LoadFromFile и т.п.
result:=@b;
end;

procedure FreeBitmap(b:Pointer);
begin
TBitmap(b).free/destroy;
end;


 
-matrix- ©   (2006-01-15 01:36) [5]

2 з. танька: Спасибо!
Решил пересмотреть свой код по твоему примеру - как же это, у одних работает, а у других - нет? Я же тоже самое до опубликования темы делал - не получалось, поедал память... Так вспомнилось, что graph функция вызывала другую bitmap"ную функцию, и она уже давала утечку лишних значений. Так что создал временную bitmap для второй функции - и теперь не ест ничего лишнего.
А все-таки жаль, красиво могло быть, если бы значения не убегали... Имхо, недочет болрандцев.
PS Функции мои, а не с delphiworld"а.
PPS Хм, а что за delphiworld-то? Где он находится? Просто я когда-то был дизайнером одноименного сайта, искалечил его внешний вид (ну, получилось так (; ) и уехал, доступа к сайту месяца 3 не было. Когда приехал, нарисовал классное главное меню - а он (сайт) возьми и пропади. Админа понимаю, дела, времени обновлять не было... Но хороший сайт был. Крупный.


 
antonn ©   (2006-01-15 09:20) [6]

-matrix- ©   (15.01.06 1:36) [5]
PPS Хм, а что за delphiworld-то? Где он находится?

http://www.delphiworld.narod.ru/


 
баклан   (2006-01-15 10:16) [7]

result:=@b;

может гоню, но достаточно result:=b; да имысл прямо указатели юзать? когда можно возвращать TBitmap сразу. имхо, бред


 
VirEx ©   (2006-01-15 10:59) [8]


>  [7] баклан   (15.01.06 10:16)

ну юзай типизированными переменными (объектами корректней будет называть) ктож тебя баклана сдерживает?


 
Набережных С. ©   (2006-01-15 11:04) [9]


> баклан   (15.01.06 10:16) [7]


> имхо, бред

Именно. Кроме того, что b: TBitmap и без того указатель, это еще и локальная переменная, пытаться обратиться к которой за пределами приведенной функции невозможно.


 
баклан   (2006-01-15 11:37) [10]

Набережных С. ©   (15.01.06 11:04) [9]
дык про это и говорю. что-то ваще не то творится )



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

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

Наверх




Память: 0.49 MB
Время: 0.055 c
6-1130963292
xman
2005-11-02 23:28
2006.02.12
PING


3-1134563319
Den47
2005-12-14 15:28
2006.02.12
Кто работал с TDBF?


2-1137175072
asd
2006-01-13 20:57
2006.02.12
ActionManager1.AddAction


15-1137823185
begin...end
2006-01-21 08:59
2006.02.12
С Днём рождения! 21 января


2-1138080657
Janbolat
2006-01-24 08:30
2006.02.12
FTP-Админ как?