Форум: "Основная";
Текущий архив: 2002.06.13;
Скачать: [xml.tar.bz2];
ВнизEOutOfResources - может кто знает как избежать эт ошибку? Найти похожие ветки
← →
MrAngel (2002-06-02 14:04) [0]Ребятя короче проэкт стоит не могу от этой ошибки избавиться...
Про блема вот в чём:
Я создаю битовые карты в памяти (массив указателей на битовые карты).
Код примерно выглядет так:
var BMP_MAS:Array [0..1000-1] of TBitmap;
i:integer;
begin
for i:=0 to 1000-1 do
begin
BMP_MAS[i]:=TBitmap.Create;
BMP_MAS[i].Width:=100;
BMP_MAS[i].Height:=100;
BMP_MAS[i].... :=24Bit;
end;
end;
Примерно на i=400 вылетает ета ошибка типа не могу больше выделить системных ресурсов. На сколько я помню виртуальный режим позволяет выделять до 4Gb адресного пространства каждой программе.
Давайте подщитаем:
1. Количество байт для каждой картинки - 100*100*24=240000
2. Количество байт для 1000 картинок 240000000=288Mb
У меня на диске сейчас 4Gb свободного места. Причём для свап файла выделено не менее 400Mb. Ни какой больше программы у меня кроме Дельфи не запущено => моеё программе теоретически должно быть выделено 288Mb.
Кстати при работе вообще с памятью такаяже ошибка (это функции типа SetLength GetMem AllocMem и др.)
Когда то давно я ещё программируя на паскале использовал {$M }
Теперь эта директива находится в .cfg файла главного проекта.
Короче крыша едет... может кто с этим уже сталкивался то подскажите пожалуйста...
Повторю ещё раз вопрос как мне выделить вольше ресурсов дабы избежать эту ошибку?
← →
Song (2002-06-02 14:40) [1]Запускать на w2k. На 98-ом к сожалению никак. Это порок большой программы+глючных виндов.
← →
MrAngel (2002-06-02 14:45) [2]Не совсем в курсе что такое w2k.
А есть ли какой нибуть другой способ или какие дибуть идеи или предположения?
← →
Виктор (2002-06-02 15:07) [3]сколько оперативной памяти? Если запускать программу в отладчике и без отладчика - ошибка возникает при одном и том же i?
← →
MrAngel (2002-06-02 15:21) [4]Так у меня 128Mb ... да в обоих случаях вылетает ошибка...
← →
Song (2002-06-02 15:44) [5]w2k - Это Windows 2000 Также хорошо работают с памятью XP и NT
← →
MrAngel (2002-06-02 15:47) [6]А ясно... нет я короче и в XP и в 98 запускал прогу всёравно одна и таже ошибка...
По моему это надо что то на этапе компиляции делать.
← →
MrAngel (2002-06-03 09:11) [7]Ребята неужели ни кто не сталкивался с такой проблемой ?
← →
MBo (2002-06-03 09:16) [8]А их нужно все одновременно держать в памяти?
кстати, объем одной 100*100*3=30 kB
← →
Anatoly Podgoretsky (2002-06-03 09:52) [9]MrAngel © (02.06.02 14:04)
...
Давайте подщитаем:
1. Количество байт для каждой картинки - 100*100*24=240000
Давайте еще раз подсчитаем:
1. Количество байт для каждой картинки - 100*100*3=30000
2. Количество байт для 1000 картинок 40000000=9.6 Mb
Так что дело наверно не в этом, а наверно в ОС
← →
vuk (2002-06-03 11:08) [10]скорее всего имеет место обычное исчерпание ресурсов GDI. Дело не в объеме памяти, занимаемой изображениями, а в количестве самих изображений. Выход здесь один - каким-то образом оптимизировать работу с изображениями.
← →
MrAngel (2002-06-03 11:18) [11]Так ребята признаю ошибку в расчётах. Но факт что EOutOfResources вылетает.
vuk © (03.06.02 11:08) - Может быть и так но как тогда обьяснить такое что при выполнении проседур SetLength GetMem AllocMem и др. тоже вылетает EOutOfResources???
Anatoly Podgoretsky © (03.06.02 09:52) - спасибо за исправление - тогда выходит что система не может мне выделить 9Мб памяти... ерунда какая - то.
Поймите я опустил одну деталь - я не сказал что ошибка вылетает при работе с TMemoryStream... поэтому вряд ли ето нехватка GDI ресурсов.
Может ещё кто нибудь подскажет в чём дело ?
← →
cyborg (2002-06-03 11:23) [12]Системные ресурсы это не оперативная память, а видимо память, где хранятся всякие хандлы и прочее, ты пытаешься создать 1000 картинок, тут никаких ресурсов не хватит :-), я так думаю.
Попробуй создавать не битмапы, а сделай массив поинтеров, выделяй память, размещай туда свои картинки, потом , когда нужно, читай по указателям.
← →
Виктор (2002-06-03 11:52) [13]я так и не понял - вылетает при одном и том же значении i или при разных, если запускать из ide и без. Попробуй заменить TBitMap на TButton. Как изменится результат? Меняй условия эксперимента и следи за реакцией системы. Handlы сидят только в оперативке. Чем больше озу, тем больше окон можно одновременно открывать. Вставь в цикл Application.ProcessMessages, чтобы приложению было легче дышать.
← →
MrAngel (2002-06-03 13:29) [14]cyborg © - я так и делаю... у меня ведь массив типа TBitmap. По сути дела там и находятся указатели на етот обьект. А на счёт хандлов может ты и прав. Когда попробую напишу сюда результат.
Виктор © (03.06.02 11:52) - C TButton не пробовал но делал с TMemoryStream.LoadFromFile - и вылетала таже самая ошибка. Вылетает при разных i - и без разницы где запущена в IDE или просто так. Application.ProcessMessages не использую у меня поток.
← →
Виктор (2002-06-03 14:00) [15]Похоже, дело не в цикле. Иначе эффект был бы стабилен. Похоже, копать надо глубже, в потоках. Я бы сделал так. Раз подозрение на цикл, то уменьшил бы кол-во циклов до минимума, чтобы программа заработала, затем увеличивал бы кол-во циклов, пока программа не перестанет работать. Затем надо начать эксперименты на пограничном числе. Поставить ловушки на рекурсивные вызовы процедур и т.п. Надо заставить систему выдавать стабильную ошибку в одном и том же месте, или, если не получается, то заставить ее выдавать разные сообщения.
← →
MrAngel (2002-06-03 15:24) [16]Хорошо а если взглянуть с другой стороны что такое системные ресурсы? - Ето память которая выделяется системой для приложения? Тогда по идее система должна выделить по возможности столько сколько потребует программа (вспомните игры).
Ваще странная это вещь.
Хорошо а может кто работал с диррективой $M ? Может кто знает как ею пользоваться и в каких случаях она работает и вообще на что она влияет? (Может всё таки дело в компиляции программы?)
← →
MrAngel (2002-06-03 17:52) [17]Ребята может кто нибудь знает как $M использовать?
← →
Song (2002-06-03 17:55) [18]$M дальше три числа через запятую
(сразу скажу не поможет)
← →
MrAngel (2002-06-03 18:16) [19]Хорошо тогда что эти числа обозначают?
← →
Набережных С. (2002-06-03 20:29) [20]
> MrAngel ©
По всей вероятности, тебе не хватает размера стека.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.06.13;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.004 c