EOutOfResources - как убрать

Ответить
Аватара пользователя
blackstrip
Админ
Сообщения: 1176
Зарегистрирован: Ср янв 02, 2008 1:42 pm
Откуда: Подольск
Контактная информация:

EOutOfResources - как убрать

Сообщение blackstrip » Пн май 03, 2010 5:20 pm

На заметку программистам.

Если в Дельфе пишете прогу, которая повторяет мильён раз какую то операцию, и у вас выскакивает подобная шляпа - значит вы скорее всего забили оперативку своими объектами.

ЛЮБОЙ объект, который вы создаете, например

procedure Preved();
var
a:TBitmap;
begin
a := TBitmap.Create;
//дальше его тут используете во все дыры...
end;


Необходимо убить в конце этой же процедуры когда он вам больше не нужен!

Чтоб было так:
procedure Preved();
var
a:TBitmap;
begin
a := TBitmap.Create;
//дальше его тут используете во все дыры...
//а потом убиваете
a.Free;
end;


Дельфя сама, подобно яве, ничего убивать не умеет. Никаких GarbageCollectoroв в ней нет. Отсюда много раз Create поделаете - и привет. Даже вроде бы процедура кончилась, и локальный объект должен был теоретически удалиться бы (т.к. после смерти локального указателя ничего больше на созданный объект не указывает). Но нет - ничего само не удаляется. Бесхозные объекты могут висеть в памяти сколько хочешь.

А я то раньше думал - чо это у меня в дельфе в прогах, которые что нибудь в памяти сильно с картинками делают - какие то исключения иногда выскакивают. А тут вот оно что.

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя