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

Вниз

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

 
Song   (2002-01-10 15:21) [0]

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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

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

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


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

>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-20 10:35) [10]

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

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

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

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


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

Не. Никакие это не глюки в программировании. Это блин винда, шоп ее...
Вот мои наблюдения: Значица так - был как-то у меня 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 и..... ой мамочки... пойду напьюси с горю...)


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

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 13:50) [13]

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

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


 
Steel Ice   (2002-01-20 14:00) [14]

кстати :)
виндовозину так прикольно глючить - если допустим при таких мессагах запустить ыксплорыр и там открыть НОГС(Ну Очень Графичиский Сайт) то там ТАААКОЕ колбасится - буквы съезжают, наезжают друг на друга, сквозь картинки можно просматривать рабочий стол, и ваще.
Интресно, как эти глюк-мейкеры делали свое детище? Експлорера своего? Если у него при нехватках памяти канвас такие фокусы выдает... Ладно, понимаю, если картинки не рисует - логично. Но почему, почему буквы вращаются вокруг оси и наезжают друг на друга. Ведь я так понимаю это чисто математические вычислления, хде будет следующая буква начинаться? Тогда как он зависит от памяти то? Это что, когда памяти мало, математика вся съезжает?


 
Song   (2002-01-20 14:01) [15]

Да, да, Steel Ice прав это выскакивает не только в процессе выполнения приложения, а например при загрузке формы, особенно когда их много.


 
Steel Ice   (2002-01-20 14:24) [16]

Вот. Именно этот случай.
А рецепт как от него избавица я ужо давал. Самое простое - РАМ оптимайзер.
Могу дать адресок, сольешь с моего сервера, если хош. Нинаю, разрешено ли на этом форуме давать ссылки. Не посчитают ли мну жутким рекламером и флудярой, но вроде это ж решатель проблем :)
Почтой послать не могу. У мну СМТП сервак заглючило и он от скуки повесился.
Сделана под 2000\ЫксПы кстати - ваще помойму лучший для этих виндовозов програм, который оптимизирует и делает кучу полезных фичей.

И кстать, сия трабла случаеца только в момент дизигнерства ее в делфи. Т.е. когда прога откомплирована, а еще потом и сжата ASPackom - просто отлично работает. И почти на любой памяти.
Так что на другом компе, когда будешь работать с прогой - этот оптимайзер и не нужен. Только для делфи. Мне он конкретно щас помогает.

И еще противно что никакое физическое увеличение памяти в принципе не дает результатов.

А У делфи несколько таких глюков. Например она ужасно работает с BDE. Т.е. если работать "правильно", и аккуратно - то еще куда не шло. Но стоит хоть немного ошибица гденить - и все... тапки... Insuficient memory fot this operation или как-то так.
С Аксессом ужо получше. Но Отображегие информации в Gride - хромает. Иногда визуально записи двояца.
Вот. Ну с канвасом это вот сейчасошняя трабла. И еще есть пару глюков. Щас и не упомню. Короче есть у самой дельфи+винда глюки. Глюки именно с памятью. И никакое правильное программонье от этого не спасает. Просто так у них заведено.


 
AlexDov   (2002-01-20 14:31) [17]

Приложение работает некоректно может работать по нескольким причинам.
1. Утечки памяти. Эти проблемы могут возникнуть как из-за программиста так и из-за делфи. Но это не страшная проблема она лечится с помощью MemProof"a. Скачать можно с http://www.automatedqa.com/downloads/memp0936.exe.
2. Несовместимости систем. Например надо учитывать, что в win9x gui 16-битное, а win2000/nt 32-ух. Т.ч. поаккуратнее с большими числами.
3. Увы, но дельфя написанна не идеально и есть вещи которые в ней падают. Скажу сразу по собственному опыту, не используйте функции frac и trunc, а лучше напишите свои, пусть они будет работтаь помедленее, но зато буду работать везде.

Помоему вообще собратся и сделать какой-нибудь лист, того чем в делфе пользоватся нельзя.

Кстати, если не впадлу кто знает скинтье на мыло ту ссылку на статью, которая на "Королевстве делфи" , статья по поводу глюков с канвасом на 9х.



Могу сра


 
LX&R   (2002-01-20 14:39) [18]

Попробуйте:
1) создать новое приложение
2) положить на него 300 кнопок с glypth
3) попробуйте запустить и посмотрите что будет :(


 
B   (2002-01-20 15:12) [19]

Было всё именно так, ка говорит Song.
После установки D5 Enterprise Update всё стало нормально !


 
DELPHIMUN   (2002-01-20 16:25) [20]

У меня тоже один раз такое было, но освобождение ресурсов мне помогло.


 
roman001   (2002-01-20 18:12) [21]

Такая же проблема с нехваткой ресурсов при отладке на 128мб под 98 винду, у клиента работает даже на 16. Сложно сказать в чем причина, думую в 98 винде, но я стараюсь не делать слишком большие формы, и проблема полностью снимается.


 
Илья   (2002-01-20 18:53) [22]

Кстати, у меня была проблема с MDI формами, в которых использовалось наследнование форм...
вообще замечал, что наследование форм жрет нихило gdi / user ресурсов под Win9x
можа кто понял почему?
под NT все нормально


 
Ruff-Fish   (2002-01-20 19:22) [23]

Господа, а ведь проблема со слишком большим размером Exe-шника очень просто решается - выкинь пару библиотек в dll и загружай их динамически... Т.о. размер исполнимого модуля можно раза в 3 уменьшить...


 
Steel Ice   (2002-01-20 21:59) [24]

Извините ребятки
Я понимаю.... но это не в том дело....
нету в дельфи такого глюка.... ГЛЮК В ДЕЛЬФИ А НЕ В ВАШЕМ ПРОГРАММИНГЕ!!!
И не большой это екзешник, а очень маленький....
Блин... ну в ощем, завтра напишу.... постораюсь....


 
cpp   (2002-01-21 08:41) [25]

Граждане! Если вы пользуетесь RX Gif Animator(2.75 + fix) под любой ОС то вы рано или поздно будете получать сообщение Canvas don"t allowing drawing или просто увидите намертво подвисшую программу с РАБОТАЮЩИМ анимированным изображением.
Частота появления этого сообщения не определяется не поддаётся объяснению. То сразу, а то и через полчаса. Главное то что вы часто создаёте и уничтожаете форму, на которой лежит этот компонент (например окно ожидания).


 
KSergey   (2002-01-21 08:54) [26]

м-да, написано много, попробую немного своего добавить.
Когда работал на Win9x - аналогичных гдюков было немеряно. Раза 2-3 на дню просто перезагружал комп - вот и все.
Но все решилось после перехода на Win2k Pro. Чего и всем советую.


 
cpp   (2002-01-21 09:01) [27]

Согласен с KSergey о переходе на Win2k Pro помогает на все 100% при разработке программ избежать ненужные перезагрузки.


 
Black King   (2002-01-21 10:07) [28]

Esli programma rabotajet s bazami dannih, to posle neskol"kih zapuskov programmi cherez RUN iz Delphi, eto obichnoje delo, chto ne hvatajet resursov.
Samij luchshij variant : kompilirovat" progu i zapuskat" ne iz Delphi, a cherez ShortCut ili Explorerom. Tadi bol"shinstvo problem otpadajet :o)


 
Song   (2002-01-21 16:55) [29]

2Black King: Да, так делать и приходится, но трассировка тоже нужна нередко


 
Анонимщик   (2002-01-21 17:57) [30]

У меня с Canvas don"t allowing drawing та же хрень и только под 98-ым (под 95-ым не пробовал), но не под 2000-ым. Тоже есть RXы, но это не аниматоры, а RXSpinEdit, RXFontComboBox. Хотелось бы все-таки узнать, в чем проблема, и где в библиотеке RX сделать исправления, а то я сам не смог, ибо под 98-ым оболочка Дельфи сходит с ума. Даже скопировать два десятка графических элементов не дает - валится. И кстати, если работают две копии программы, или, скажем, компилятор с формами из-под которого запущена программа с теми же формами, то сбои происходят быстрее в пять раз (если только одно приложение - то сбои все равно будут, но позже). Если запущена совершенно другими людьми сделанная программа (тоже на дельфи), то и она сбоит. Мало того, даже если Ворд запустить, то он начинает при рисовании фигур ерундой какой-то заниматься. Так вот, может, главная проблема в RX все же?


 
Victorbur   (2002-01-22 12:18) [31]

Привет всем. Прочитал ваши предложения, утверждения, описание проблем. Я работаю с D5 и D6 на W2Kserver (бывает одновременно). Стоит RX 2.75 (без fix). Все нормально. В D5 бывает иногда сообщение - нехватка памяти, перегрузка D5 И все хорошо. Может проблемы из-за неправильной установки компонентов. ОС не переустанавливал 8 месяцев, перегрузок во время работы не делаю. D6 - вообще милое дело (не глючит). D6 Bild 6.163


 
Анонимщик   (2002-01-23 11:53) [32]

Читал в факе каком-то, что виндоус не уменьшает счетчик метафайлов при их освобождении. Немного проверял, вроде, сходится, но не уверен. Так он не уменьшается и в 2К, но, тем не менее, в 2000-ом не глючит, а без RX проблем действительно меньше.


 
Тоже с бедой   (2002-04-07 15:33) [33]

Написал программу. В дельфе-6. Она юзает RXGif - как-то не удалось мне ничем иным прочесть гиф с диска одной инструкцией.
У программы - 121 окошко для гифа. В цикле их канвасы перечитываются с диска.
Результаты: на моей машине (вин2к+256 рамы) упала один раз. Это когда я параллельно с ней еще и в героев-4 поиграть решил.
На 95-х - не падает.
на МЕ - падает через два часа работы. Орет либо нет ресурсов, либо недопустимый параметр и следом - низя на канвасе рисовать.

Все освобождения делаются корректно :/



Страницы: 1 вся ветка

Форум: "Система";
Текущий архив: 2002.07.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.006 c
3-9735
PTE
2002-06-11 14:39
2002.07.04
вычмсление


1-9815
awaken
2002-06-24 12:00
2002.07.04
невизуальное программирование в Delphi


1-9868
pinV
2002-06-21 18:05
2002.07.04
Как поймать событие при resize colums в DBGrid


3-9751
VAleksey
2002-06-11 09:24
2002.07.04
Paradox - каскадные удаления.


6-9944
DikobraZ
2002-04-21 18:36
2002.07.04
Сканнер портов подвисает...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский