Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.02.12;
Скачать: [xml.tar.bz2];

Вниз

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

 
-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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.041 c
15-1137855554
Andy BitOff
2006-01-21 17:59
2006.02.12
Очень сильная и красивая фильма


1-1136974706
Barsky
2006-01-11 13:18
2006.02.12
Скрол (мышыный) в гриде


15-1138001364
0bsid
2006-01-23 10:29
2006.02.12
как лучше сделать автообновление своей программы?


9-1125066394
! Han !
2005-08-26 18:26
2006.02.12
DirectX


15-1138103140
Ega23
2006-01-24 14:45
2006.02.12
Настройки Delphi - что за беда?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский