|
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
|
|||
---|---|---|---|
#18+
Есть у меня очень нестабильный глюк. Чтобы его попробовать побороть, нужно либо понять причины, либо добиться стабильной воспроизводимости, пока нет ни того, ни другого. Выглядит это так: В какой-то момент, как правило - при открытии нового окна в одном из перечисленных ниже приложений, по экрану начинает все летать, описать сложно, но примерно так, как будто кто-то интенсивно переключается между приложениями и одновременно растянул виндовый таскбар до самого верха и дергает его там вверх-вниз (кнопка пуск тусуется в верхнем углу). Если оперативненько нажать Alt-F4, текущее приложение закроется и все стабилизируется. Набор приложений, подверженных тому глюку примерно такой: QiP Infium, FireFox, Nero, клиент-банк под JAVA и мой проект, написанный на VB6. Глюк возникает чаще всего на моем приложении, при его закрытии дополнительно либо закрывается аварийно QiP, либо в FF пропадает текст менюшек, надписей и заголовков кнопок окон (такое ощущение, что глюк возникает как бы в паре моего приложения с другим). Если же под Alt-F4 попадет другое приложение (не мой проект), то лучше мой проект перезапустить, иначе глюк вскоре возникнет вновь. То есть концы тянутся явно из моего проекта. Кое-что и кое-что я разрулил, убрались другие глюки, но этот остался, хотя стал заметно меньше. Возникает глюк не на всех машинах, хотя набор софта примерно одинаковый. ОС 2к и ХР. Оперативки на машинах хватает. Я называю этот глюк "утечкой ресурсов GDI", то есть впечатление, что у GDI перестает хватать возможности обслуживать текущие приложения, хотя собственно, перегрузки по количеству открытых приложений и окон явно нет, то есть где-то чего-то утекает. Может кто-то сталкивался с этим. Если нет - плиз, помогите разобраться советами. Я уже полгода тыкаюсь в этот глюк, что-то подчистил вроде... но мне не хватает знаний и понимания, как работает GDI в виндах и что там может куда утекать. Удручает нестабильность его возникновения (даже на домашнем компе при примерно том же наборе софта он не возникает), хорошо, хоть возникает на рабочем, а не только у некоторых пользователей. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2010, 16:22 |
|
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2010, 16:27 |
|
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
|
|||
---|---|---|---|
#18+
Игорь Горбонос почитай Похоже. Все перечисленные приложения (забыл еще EMS SQL-Manager) - в топе этого списка. Будем изучать. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2010, 16:44 |
|
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
|
|||
---|---|---|---|
#18+
тут народ обсуждает увеличение количества выделяемых дескрипторов, хотя, конечно, правильней будет победить глюк, а не расширять выделение ресурсов. Но пока по первым наблюдениям выявилась странная картина. При заполнении FlexGrid каким-нибудь заметным количеством строк (от 300) иногда (не всегда) возникает неожиданный рост выделенных дескрипторов (например на 500-1000). При закрытии сетки - возвращается на место. Если умышленно открыть большую кучу лишних тяжелых окон, доведя количество дескрипторов тыщ до 6, а потом открыть окно с отчетом на FlexGride - количество взрывообразно может улететь к 10000 и далее кнопка "пуск" в угол экрана и как обычно.... Попытаемся поСпайПлюсПлюсить.... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2010, 17:36 |
|
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
|
|||
---|---|---|---|
#18+
В общем, проблема немножко локализовалась, правда не настолько, чтобы ее решить. Итак, в нормальном рабочем режиме пожирание GDI моим проектом идет 1000-3000, что неудивительно, многие формы достаточно нагружены контролами, что диктуется спецификой проекта, но, в принципе, терпимо. Но в какой-то момент работы с определенным кругом форм (все они содержат FlexGrid, хотя не факт пока, что дело в нем) - происходит взрывообразный рост объектов GDI до 9900-10000 и начинаются глюки. Если мелькание не началось (а оно начинается то ли не на всех машинах, то ли не всегда), то внимательно глядя в диспетчер задач, можно закрыть одну единственную форму, которая сожрала ресурсы и дальше можно продолжить нормальную работу, даже не перезапуская проект. Однако, с помощью Spy++ мне не удалось обнаружить, где они все повисли. Но дерево окон там сильно вложенное и найти достаточно проблематично, если они там есть. В связи с вышеизложенным три вопроса: 1) "Объекты GDI" в диспетчере задач соответствуют количеству дескрипторов окон данного приложения, которые я вижу и могу найти в Spy++? 2) Можно ли самостоятельно перебрать и составить собственные перечень окон подобно тому, как это делать Spy++, чтобы разыскать эти дурацкие потерянные ресурсы. 2а) Или может каким-то образом заставить Spy++ развернуть все свои узлы (встроенной функции нет, но может ему можно послать какое-нить оконное сообщение (да хоть бы даже средствами самого Spy++))? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2010, 16:35 |
|
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
|
|||
---|---|---|---|
#18+
> Автор: Shocker.Pro Ответ на 2а: звездочка, на NumPad, разворачивает все свернутые узлы дерева Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2010, 16:45 |
|
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
|
|||
---|---|---|---|
#18+
Еще с подачи Игоря: Подозрительные формы содержат FlexGrid-ы. Причем - с картинками в каждой строке. Картинки там образуются путем присвоения свойству CellPicture ссылки на картинку из ImageList-а. Есть у кого какие мысли по этому поводу? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2010, 18:12 |
|
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
|
|||
---|---|---|---|
#18+
Shocker.Pro, Писал формы в 2004 на VB6 c flexgrid и развитым набором контролов. Проводил экперименты сколько открытых форм "обрушат" систему. Примерно на 25-ой все стопорилось. Может перейти на .NET ? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2010, 18:40 |
|
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
|
|||
---|---|---|---|
#18+
ThermikПисал формы в 2004 на VB6 c flexgrid и развитым набором контролов. Проводил экперименты сколько открытых форм "обрушат" систему. Примерно на 25-ой все стопорилось. Если под виндами 95 или 98 - то да. А от NT и выше - спокойно работает и больше форм. Все зависит от свободных ресурсов GDI и оперативки. ThermikМожет перейти на .NET ? Проект очень большой (количество только форм измеряется сотнями) + неопытность в начале разработки проекта = кривой код. Я потихоньку двигаюсь в этом направлении (инкапсулирую, перетаскиваю бизнес-логику в процедуры sql, переписываю старый код), но пока это нереальный вариант. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2010, 18:48 |
|
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
|
|||
---|---|---|---|
#18+
Shocker.Pro, У меня получилось довольно быстро, так как большинство форм это было отображение вьюшек к SQL данным. Фомы в основном отличались логикой раскраски и группировки ячеек после получения данных от сервера. И действиям, куда перепрыгивать по контекстому меню из одной формы в другую. пример можно посмотреть здесь http://www.icqrobot.ru/img/ddd.gif ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2010, 19:03 |
|
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
|
|||
---|---|---|---|
#18+
Сегодня я увидел в диспетчере задач более 4-х миллиардов открытых объектов GDI для моей проги. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2010, 13:28 |
|
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
|
|||
---|---|---|---|
#18+
Shocker.Pro 1) "Объекты GDI" в диспетчере задач соответствуют количеству дескрипторов окон данного приложения, которые я вижу и могу найти в Spy++?Нет. Объекты GDI это то, что можно подать на вход GetObjectType()/GetObject(). ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2010, 15:44 |
|
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
|
|||
---|---|---|---|
#18+
13-й кварталНет. Объекты GDI это то, что можно подать на вход GetObjectType()/GetObject(). А можно примерно перечислить? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2010, 15:49 |
|
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2010, 18:29 |
|
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
|
|||
---|---|---|---|
#18+
13-й кварталМожно Да, я это имел ввиду, только моих знаний, к сожалению, недостаточно, чтобы хорошо понимать взаимосвязь работы программы на VB и появлением этих объектов. 13-й кварталИли имеется ввиду перечисление (перебор) экземпляров объектов? А вот это было бы замечательно, ибо через Spy++ я явно вижу не все, что вижу через диспетчер задач. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2010, 19:38 |
|
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
|
|||
---|---|---|---|
#18+
В общем, застрял я пока. HELP! Наблюдения показывают примерно следующее: Прога долгое время работает нормально, в диспетчере задач я вижу примерно столько GDI-объектов, сколько ожидаю увидеть. Вижу ожидаемое увеличение при открытии форм, и возврат к предыдущему количеству при закрытии форм. На некоторых формах есть сетки MSFlexGrid, заполняемые из базы. Обновление сетки не оказывает никакого влияния на количество GDI-объектов, что, в общем-то, логично. В какой-то момент происходит какой-то глюк. После него количество GDI-объектов начинает прыгать произвольно: открываешь форму: +4000, закрываешь форму: -2000, открываешь другую форму: +100, закрываешь: -5000. Также начинает влиять обновление сеток MSFlexGrid из базы, причем при неизменной информации и количество строк-столбцов в ней, жмешь несколько раз "обновить", цифра прыгает 2000, 8000, 5000, 1500, 9000, 2000 и т. п. Как я уже говорил, в SPY++ я такого количества оконных объектов не наблюдаю. Так что чтобы понять, что это за объекты, надо каким-то образом составить перечень в нужный момент времени. Как это сделать - даже близко не представляю. Помогите плиз. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2010, 14:33 |
|
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
|
|||
---|---|---|---|
#18+
микрософт рекомендовало замену в качестве MSHFlexGrid c последним патчем ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2010, 14:39 |
|
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
|
|||
---|---|---|---|
#18+
Konst_Oneмикрософт рекомендовало замену в качестве MSHFlexGrid c последним патчем а) я не уверен, что проблема именно в сетке... 50/50 б) я никогда не работал с MSHFlexGrid, как там с совместимостью с MSFlexGrid по событиям/методам/свойствам? (иерархические расширения не в счет) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2010, 14:50 |
|
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
|
|||
---|---|---|---|
#18+
Shocker.Pro, Я не разбирался детально, но попробуйте почитать и применить ПО из следующего цикла статей: Resource Leaks: Detecting, Locating, and Repairing Your Leaky GDI Code (Windows 98) Detect and Plug GDI Leaks in Your Code with Two Powerful Tools for Windows XP ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2010, 15:03 |
|
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
|
|||
---|---|---|---|
#18+
13-й квартал, Ага, по второй ссылке интересная софтина, тока там исходники, а я ни разу не СИшник, как мне это грамотно запустить? Тaм есть исполняемые файлы, но они для начала требуют MFC70.DLL и не знаю, что потребует дальше. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2010, 15:26 |
|
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
|
|||
---|---|---|---|
#18+
Shocker.Pro13-й квартал, Ага, по второй ссылке интересная софтина, тока там исходники, а я ни разу не СИшник, как мне это грамотно запустить? Тaм есть исполняемые файлы, но они для начала требуют MFC70.DLL и не знаю, что потребует дальше. думаю, что надо начать разборки с твоего кода, который на твоей системе (только на твоей или у кого-то ещё такое поведение твоей программы) вызывает переполнение ресурсов GDI ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2010, 15:27 |
|
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
|
|||
---|---|---|---|
#18+
Konst_Oneдумаю, что надо начать разборки с твоего кода, который на твоей системе (только на твоей или у кого-то ещё такое поведение твоей программы) вызывает переполнение ресурсов GDI На моей и еще на нескольких. Разборками кода я и занимаюсь все это время. Данные программы (GDILeaks), судя по всему, помогут более подробно мониторить ресурсы, тока как бы мне ее запустить на машинах, где нет C. Может кто-то слепит инсталлятор на скорую руку? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2010, 15:33 |
|
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
|
|||
---|---|---|---|
#18+
ты сабклассишь грид и рисуешь в ячейках? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2010, 15:35 |
|
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
|
|||
---|---|---|---|
#18+
проверь эти компьютеры на предмет наличия этой заплатки ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2010, 15:38 |
|
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
|
|||
---|---|---|---|
#18+
Konst_Oneты сабклассишь грид и рисуешь в ячейках? 1) да, только для целей скроллинга 2) да, вставляю картинки из ImageList-ов ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2010, 15:40 |
|
|
start [/forum/topic.php?fid=60&msg=36615469&tid=2159131]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
50ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 329ms |
total: | 479ms |
0 / 0 |