На заметку программистам.
Если в Дельфе пишете прогу, которая повторяет мильён раз какую то операцию, и у вас выскакивает подобная шляпа - значит вы скорее всего забили оперативку своими объектами.
ЛЮБОЙ объект, который вы создаете, например
procedure Preved();
var
a:TBitmap;
begin
a := TBitmap.Create;
//дальше его тут используете во все дыры...
end;
Необходимо убить в конце этой же процедуры когда он вам больше не нужен!
Чтоб было так:
procedure Preved();
var
a:TBitmap;
begin
a := TBitmap.Create;
//дальше его тут используете во все дыры...
//а потом убиваете
a.Free;
end;
Дельфя сама, подобно яве, ничего убивать не умеет. Никаких GarbageCollectoroв в ней нет. Отсюда много раз Create поделаете - и привет. Даже вроде бы процедура кончилась, и локальный объект должен был теоретически удалиться бы (т.к. после смерти локального указателя ничего больше на созданный объект не указывает). Но нет - ничего само не удаляется. Бесхозные объекты могут висеть в памяти сколько хочешь.
А я то раньше думал - чо это у меня в дельфе в прогах, которые что нибудь в памяти сильно с картинками делают - какие то исключения иногда выскакивают. А тут вот оно что.
EOutOfResources - как убрать
- blackstrip
- Админ
- Сообщения: 1185
- Зарегистрирован: Ср янв 02, 2008 1:42 pm
- Откуда: Подольск
- Контактная информация:
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость