Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Другая проблема =). Вообщем программа уже не мала, размер exe больше мегабайта, иногда вылетает критическая ошибка EOutOfRecources и другие. Помогает перезагрузка Дельфей.


Страницы:   1 2

Song ©   (2002-01-10 15:21:00) 

Таже часто выкидывает "Canvas don"t allowing drawing" и др. непонятные ошибки. Память - 128 МБ, Дельфи 6. Всегда бывает, когда загружены приложения, занимающие много пямяти (Outlook, Internet Explorer и сама IDE, MS Word). Закрываю IDE всё идёт ok. Понимаю, что не хватает чему-то памяти. Глюк дельфи с выделением памяти приложению? Или ОС? В WinXP такого не было ни разу.


Steel Ice   (2002-01-20 13:50:00) [21]

Ладно. А почему тогда это на 95й пахало отлицна, а в 2000 глючит?
Причем заметь!!!! Никаких run-time! Все в обычных компонентишках лежало себе на формочке, красиво разложенное.
И такое соопчение возникает не только при запущеной программе, а просто при открывании данной формы? Т.е. как может влиять текст программы, на design-mode? Можно конечно сослаться на глючность компонентов. Но я их год до этого использовал - все прекрасно пахало. Это шото либо в дельфи, либо винде. А можыт и там и там.. :)

Винда ж памятью управляеца неправильно. И потому для нее куча RAM оптимайзероф написано. А все всеравно бестолку!
Ибо когда делфи видать хочеть сделать какомунить участочку памяти free - винда грит шо мол все, сделала, а на самом деле шыш. А может и не в этом дело.
Я собсно и не говорил что моя версия единственная правильная.
Я просто рассказал что видел собсными глазами.


ctapik-net   (2002-01-20 13:00:00) [22]

Steel Ice помоему ты не прав насчет того что это винды

У меня была проблема с EOutOfResources заключалось в том, что я использовал WinApi функцию которая мне возвращала поинтер на иконку, а я этот поинтер не удалял. После более подробного прочтения MSDN по этой функции я нашел, что там в самом конце была памятка:

If SHGetFileInfo returns an icon handle in the hIcon member of the SHFILEINFO structure pointed to by psfi, you are responsible for freeing it with DestroyIcon when you no longer need it.

Во как. когда я все сделал как надо у мяня ошибка EOutOfResources и Canvas does not allow drawing перестали выскакивать.

Mas[t].Free это правильно


Steel Ice   (2002-01-20 11:17:00) [23]

Не. Никакие это не глюки в программировании. Это блин винда, шоп ее...
Вот мои наблюдения: Значица так - был как-то у меня 4й дельфилятор, работал - как бешенный, стоял дома, на 233м пенту и 32 оперативки, и задачки на нем решались нехилые (например, попробуйте - 8 RX компоненток ГИФ-Аниматора. Плюс БД. Все мигает лампочками AbLED. Короче сам комп тормозил от этой всей жути конкретно, но не глючило. А стоял там виндовоз 95, но сделаный под 98 (методом установки интернет-испортил 4.0). Так.
Следующий мой шаг в развитии был переход на 5й дельфи. В техникуме. Там стояли машинки 333 (памяти тож 32). Все в принципе тоже работало, но например если я делал View-Form и сморел форму эту - кампутер задумывался секунд на 10-15 (причем к винту обращений почти небыло) и потом неспеша выводил эту форму.
И вот сейчас время. Играми я переболел. Пишу совершенно простые программки. Да, пусть йомкие, пусть много-памяти-занимающие. Но почти без "дравинга канваса". Ну и комп сейчас - сервак, 1.4ГГц + 512Мб. И что бы выдумали? Шыстая делфа блин, после получаса работы - на паршивом wwGrid (от InfoPower) валица с таким сообщениемю. И я еще благодарю компутерных богоф, если удаеца потом сохранить проект - выйти из делфы. Причем закрывшы и открывшы это безобразие работает снова полчасика, а потом каюк.

А траблы - нычаца в делфиляторах (чем старше, тем с памятью у них хужее, видели, скока шыстая жмет оперативки??? 69 мег... это тихий ужас... у меня SQL сервак только больше занимает - 150мег)
А еще 2000 винда - тоже молодца.. тоже с памятью работает не лучше чем я умею готовить.
Решаеца
1. заменой винды на linux, дельфи на kylix (преимущистф - просто дофига)
2. поставить хотяб какойнить RAM оптимизатор.. несколько помагает.. лично я пока RAM Optimizer (в пакете Customize XP) полюбляю... клацная вещч. (преимущиств - столько же, сколько у осужденного на смерть, которому дали последнее желание... ибо выйдет скоро какаянить XP 2003 и Delphi 7 и..... ой мамочки... пойду напьюси с горю...)


Song   (2002-01-20 10:35:00) [24]

Да, нет все прорисовываются. Я вставляю ProcessMessages.

Да, именно так и освобождаю: Mas[t].Free. А чего посоветуешь Release? Destroy?
Насчёт временных: я написал что ошибки нет, потому что я их сам создаю, сам и освобождаю.

Str:=TStringList.Create
try
....
finally
Str.Free;
end;

Спасибо, ctapik-net, если будут проблемы, я тебе обязательно напишу. Сейчас вот только эта с канвасом и EOutOfResources...


ctapik-net   (2002-01-20 08:49:00) [25]

>2Старик-net:
>Использую CreateProcess, ShellExecute (частенько)
>Да, у меня в цикле создвются объекты TBitBtn

>For t:=1 to n Do Mas[t]:=TBitBtn.Create(nil);

>Но я всегда их освобождаю, я уверен.
Как ты их освобождаешь? Mas[t].Free?
>Также создаются другие временные объекты, но они создаются и >освобождаются в пределах одной процедуры, поэтому здесь ошибки нет.

Запомни, дельфи не настолько умен, чтобы все что ты алокейтнул в процедуре после её окончания освободить. Все поентеры и классы созданные тобой в какой нибудь процедуре не будут удалены из памяти до тех пор пока
1 Ты сам их не удалишь.
2 Программа закончит работу.


Это я убидился на личном опыте. Если создовать и ничего не уничтожать, то рано или поздно программа будет глючить как у тебя. Да, кстати, у тебя когда программа работает в цикле на основной форме некоторые компоненты не прорисовываются, так?

Запости сюда код связанный с циклом и все процедуры которые в нем выполняются, я тебе помaгу его отладить.

Но лучше всего, если ты сам будешь отлаживать используя MemProof


Song   (2002-01-19 13:59:00) [26]

2Старик-net:
Использую CreateProcess, ShellExecute (частенько)
Да, у меня в цикле создвются объекты TBitBtn

For t:=1 to n Do Mas[t]:=TBitBtn.Create(nil);

Но я всегда их освобождаю, я уверен. Также создаются другие временные объекты, но они создаются и освобождаются в пределах одной процедуры, поэтому здесь ошибки нет.


ctapik-net   (2002-01-15 16:39:00) [27]

Точно могу сказать, что у тебя программа связана с перебором. Там то у тебя происходит утечка памяти. Используешь ли ты API? Если да, напиши какие функции, навернка из-за них утечка. Если не используешь, то у тебя где-нибудь в цикле постоянно аллокейтуется память и не освобождается.


Вячеслав   (2002-01-14 11:28:00) [28]

На "Королевстве делфи" лежит статья по поводу глюков с канвасом на 9х.
Может там чего найдешь.


13-ый   (2002-01-11 11:52:00) [29]

открой индикатор системных ресурсов и посмотри, какие ресурсы и как меняются при запуске/выгрузке программы. очень часто дохнут ресурсы модуля gdi (обычно это и приводит к мессагам типа canvas что-то там)... лечится ручным создаванием и уничтожением форм по мере надобности и контролем за графикой


Song   (2002-01-11 10:38:00) [30]

Да, FisBone, я и говорю, что WinXP всё вылечил. Но WinXP у меня тока дома :(( На работе Win 9x
TThread не использую. Сбой бывает только в 9x


Fishbone   (2002-01-11 10:25:00) [31]

Видимо тут всего по-немногу и ОС и Дельфи и компоненты - у меня было тог же самое на D5 + WinME + компаненты RX - эта связка стабильнодавала сбои. Замена второго звена на Windows XP вылечила проблему в корне


Иван Шихалев   (2002-01-10 18:01:00) [32]

Вылетает под Win9x? Или под 2000?


Алексей Петров   (2002-01-10 15:59:00) [33]

У тебя не TThread используется?
Canvas don"t allowing drawingчасто выдается при обращении к VCL без synhronize :)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо