powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
25 сообщений из 64, страница 1 из 3
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
    #36590566
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть у меня очень нестабильный глюк. Чтобы его попробовать побороть, нужно либо понять причины, либо добиться стабильной воспроизводимости, пока нет ни того, ни другого.

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

Если оперативненько нажать Alt-F4, текущее приложение закроется и все стабилизируется.

Набор приложений, подверженных тому глюку примерно такой: QiP Infium, FireFox, Nero, клиент-банк под JAVA и мой проект, написанный на VB6. Глюк возникает чаще всего на моем приложении, при его закрытии дополнительно либо закрывается аварийно QiP, либо в FF пропадает текст менюшек, надписей и заголовков кнопок окон (такое ощущение, что глюк возникает как бы в паре моего приложения с другим).
Если же под Alt-F4 попадет другое приложение (не мой проект), то лучше мой проект перезапустить, иначе глюк вскоре возникнет вновь. То есть концы тянутся явно из моего проекта.

Кое-что и кое-что я разрулил, убрались другие глюки, но этот остался, хотя стал заметно меньше.

Возникает глюк не на всех машинах, хотя набор софта примерно одинаковый. ОС 2к и ХР.

Оперативки на машинах хватает. Я называю этот глюк "утечкой ресурсов GDI", то есть впечатление, что у GDI перестает хватать возможности обслуживать текущие приложения, хотя собственно, перегрузки по количеству открытых приложений и окон явно нет, то есть где-то чего-то утекает.


Может кто-то сталкивался с этим. Если нет - плиз, помогите разобраться советами. Я уже полгода тыкаюсь в этот глюк, что-то подчистил вроде... но мне не хватает знаний и понимания, как работает GDI в виндах и что там может куда утекать. Удручает нестабильность его возникновения (даже на домашнем компе при примерно том же наборе софта он не возникает), хорошо, хоть возникает на рабочем, а не только у некоторых пользователей.
...
Рейтинг: 0 / 0
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
    #36590589
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Shocker.Pro

почитай

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
    #36590653
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос почитай


Похоже.
Все перечисленные приложения (забыл еще EMS SQL-Manager) - в топе этого списка.

Будем изучать.
...
Рейтинг: 0 / 0
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
    #36590777
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тут народ обсуждает увеличение количества выделяемых дескрипторов, хотя, конечно, правильней будет победить глюк, а не расширять выделение ресурсов.

Но пока по первым наблюдениям выявилась странная картина. При заполнении FlexGrid каким-нибудь заметным количеством строк (от 300) иногда (не всегда) возникает неожиданный рост выделенных дескрипторов (например на 500-1000). При закрытии сетки - возвращается на место. Если умышленно открыть большую кучу лишних тяжелых окон, доведя количество дескрипторов тыщ до 6, а потом открыть окно с отчетом на FlexGride - количество взрывообразно может улететь к 10000 и далее кнопка "пуск" в угол экрана и как обычно....

Попытаемся поСпайПлюсПлюсить....
...
Рейтинг: 0 / 0
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
    #36592815
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, проблема немножко локализовалась, правда не настолько, чтобы ее решить.

Итак, в нормальном рабочем режиме пожирание GDI моим проектом идет 1000-3000, что неудивительно, многие формы достаточно нагружены контролами, что диктуется спецификой проекта, но, в принципе, терпимо. Но в какой-то момент работы с определенным кругом форм (все они содержат FlexGrid, хотя не факт пока, что дело в нем) - происходит взрывообразный рост объектов GDI до 9900-10000 и начинаются глюки.
Если мелькание не началось (а оно начинается то ли не на всех машинах, то ли не всегда), то внимательно глядя в диспетчер задач, можно закрыть одну единственную форму, которая сожрала ресурсы и дальше можно продолжить нормальную работу, даже не перезапуская проект.

Однако, с помощью Spy++ мне не удалось обнаружить, где они все повисли. Но дерево окон там сильно вложенное и найти достаточно проблематично, если они там есть.
В связи с вышеизложенным три вопроса:

1) "Объекты GDI" в диспетчере задач соответствуют количеству дескрипторов окон данного приложения, которые я вижу и могу найти в Spy++?

2) Можно ли самостоятельно перебрать и составить собственные перечень окон подобно тому, как это делать Spy++, чтобы разыскать эти дурацкие потерянные ресурсы.

2а) Или может каким-то образом заставить Spy++ развернуть все свои узлы (встроенной функции нет, но может ему можно послать какое-нить оконное сообщение (да хоть бы даже средствами самого Spy++))?
...
Рейтинг: 0 / 0
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
    #36592847
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Shocker.Pro

Ответ на 2а:
звездочка, на NumPad, разворачивает все свернутые узлы дерева


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
    #36593101
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще с подачи Игоря:

Подозрительные формы содержат FlexGrid-ы. Причем - с картинками в каждой строке. Картинки там образуются путем присвоения свойству CellPicture ссылки на картинку из ImageList-а. Есть у кого какие мысли по этому поводу?
...
Рейтинг: 0 / 0
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
    #36593162
Thermik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Писал формы в 2004 на VB6 c flexgrid и развитым набором контролов. Проводил экперименты сколько открытых форм "обрушат" систему. Примерно на 25-ой все стопорилось.

Может перейти на .NET ?
...
Рейтинг: 0 / 0
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
    #36593189
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ThermikПисал формы в 2004 на VB6 c flexgrid и развитым набором контролов. Проводил экперименты сколько открытых форм "обрушат" систему. Примерно на 25-ой все стопорилось.

Если под виндами 95 или 98 - то да. А от NT и выше - спокойно работает и больше форм. Все зависит от свободных ресурсов GDI и оперативки.

ThermikМожет перейти на .NET ?

Проект очень большой (количество только форм измеряется сотнями) + неопытность в начале разработки проекта = кривой код. Я потихоньку двигаюсь в этом направлении (инкапсулирую, перетаскиваю бизнес-логику в процедуры sql, переписываю старый код), но пока это нереальный вариант.
...
Рейтинг: 0 / 0
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
    #36593231
Thermik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

У меня получилось довольно быстро, так как большинство форм это было отображение вьюшек к SQL данным.

Фомы в основном отличались логикой раскраски и группировки ячеек после получения данных от сервера. И действиям, куда перепрыгивать по контекстому меню из одной формы в другую.

пример можно посмотреть здесь

http://www.icqrobot.ru/img/ddd.gif
...
Рейтинг: 0 / 0
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
    #36594620
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сегодня я увидел в диспетчере задач более 4-х миллиардов открытых объектов GDI для моей проги.
...
Рейтинг: 0 / 0
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
    #36595136
Shocker.Pro 1) "Объекты GDI" в диспетчере задач соответствуют количеству дескрипторов окон данного приложения, которые я вижу и могу найти в Spy++?Нет. Объекты GDI это то, что можно подать на вход GetObjectType()/GetObject().
...
Рейтинг: 0 / 0
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
    #36595151
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13-й кварталНет. Объекты GDI это то, что можно подать на вход GetObjectType()/GetObject().

А можно примерно перечислить?
...
Рейтинг: 0 / 0
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
    #36595627
Shocker.Pro,

Можно . Или имеется ввиду перечисление (перебор) экземпляров объектов?
...
Рейтинг: 0 / 0
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
    #36595732
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13-й кварталМожно

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

13-й кварталИли имеется ввиду перечисление (перебор) экземпляров объектов?

А вот это было бы замечательно, ибо через Spy++ я явно вижу не все, что вижу через диспетчер задач.
...
Рейтинг: 0 / 0
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
    #36615263
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, застрял я пока. HELP!

Наблюдения показывают примерно следующее:

Прога долгое время работает нормально, в диспетчере задач я вижу примерно столько GDI-объектов, сколько ожидаю увидеть. Вижу ожидаемое увеличение при открытии форм, и возврат к предыдущему количеству при закрытии форм.
На некоторых формах есть сетки MSFlexGrid, заполняемые из базы. Обновление сетки не оказывает никакого влияния на количество GDI-объектов, что, в общем-то, логично.

В какой-то момент происходит какой-то глюк. После него количество GDI-объектов начинает прыгать произвольно: открываешь форму: +4000, закрываешь форму: -2000, открываешь другую форму: +100, закрываешь: -5000. Также начинает влиять обновление сеток MSFlexGrid из базы, причем при неизменной информации и количество строк-столбцов в ней, жмешь несколько раз "обновить", цифра прыгает 2000, 8000, 5000, 1500, 9000, 2000 и т. п.

Как я уже говорил, в SPY++ я такого количества оконных объектов не наблюдаю. Так что чтобы понять, что это за объекты, надо каким-то образом составить перечень в нужный момент времени. Как это сделать - даже близко не представляю. Помогите плиз.
...
Рейтинг: 0 / 0
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
    #36615281
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
микрософт рекомендовало замену в качестве MSHFlexGrid c последним патчем
...
Рейтинг: 0 / 0
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
    #36615313
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneмикрософт рекомендовало замену в качестве MSHFlexGrid c последним патчем

а) я не уверен, что проблема именно в сетке... 50/50
б) я никогда не работал с MSHFlexGrid, как там с совместимостью с MSFlexGrid по событиям/методам/свойствам? (иерархические расширения не в счет)
...
Рейтинг: 0 / 0
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
    #36615345
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
...
Рейтинг: 0 / 0
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
    #36615401
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13-й квартал,

Ага, по второй ссылке интересная софтина, тока там исходники, а я ни разу не СИшник, как мне это грамотно запустить? Тaм есть исполняемые файлы, но они для начала требуют MFC70.DLL и не знаю, что потребует дальше.
...
Рейтинг: 0 / 0
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
    #36615412
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro13-й квартал,

Ага, по второй ссылке интересная софтина, тока там исходники, а я ни разу не СИшник, как мне это грамотно запустить? Тaм есть исполняемые файлы, но они для начала требуют MFC70.DLL и не знаю, что потребует дальше.

думаю, что надо начать разборки с твоего кода, который на твоей системе (только на твоей или у кого-то ещё такое поведение твоей программы) вызывает переполнение ресурсов GDI
...
Рейтинг: 0 / 0
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
    #36615441
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneдумаю, что надо начать разборки с твоего кода, который на твоей системе (только на твоей или у кого-то ещё такое поведение твоей программы) вызывает переполнение ресурсов GDI

На моей и еще на нескольких. Разборками кода я и занимаюсь все это время.

Данные программы (GDILeaks), судя по всему, помогут более подробно мониторить ресурсы, тока как бы мне ее запустить на машинах, где нет C. Может кто-то слепит инсталлятор на скорую руку?
...
Рейтинг: 0 / 0
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
    #36615449
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты сабклассишь грид и рисуешь в ячейках?
...
Рейтинг: 0 / 0
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
    #36615463
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проверь эти компьютеры на предмет наличия этой заплатки
...
Рейтинг: 0 / 0
Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
    #36615469
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneты сабклассишь грид и рисуешь в ячейках?

1) да, только для целей скроллинга
2) да, вставляю картинки из ImageList-ов
...
Рейтинг: 0 / 0
25 сообщений из 64, страница 1 из 3
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Прыгающая по экрану кнопка "пуск", мерцание и т.п.....
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]