Вверх ↑
Этот топик читают: Гость
Ответов: 1926
Рейтинг: 172
#1: 2020-01-20 22:17:22 ЛС | профиль | цитата
В довольно объёмном проекте (~10к компонентов) при открытии теперь вылетает ошибка "Out of system resources". При попытке открыть редактор строк (двойным кликом по компоненту, например message) вылетает ошибка 87, при этом даже скриншот при активном окне hiasm сделать не удаётся ("недостаточно памяти для создания рисунка"). (Чтобы сделать скриншот, пришлось сделать окно hiasm неактивным.)


Похожие проблемы я видел на форуме:
https://forum.hiasm.com/topic/51880
https://forum.hiasm.com/topic/10532/1
Там nesco предлагал увеличить в системе иконный кэш, но не описал, как это сделать. В интернете нахожу только HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Max Cached Icons, который выставляю в 10000, перезагружаю комп, но ошибка hiasm не исчезает.

nesco, что же нужно сделать?

--- Добавлено в 2020-01-20 22:17:40

Редактировалось 4 раз(а), последний 2020-01-20 22:41:10
карма: 9
0
файлы: 1err87.jpg [85KB] [1727]
Главный модератор
Ответов: 2999
Рейтинг: 396
#2: 2020-01-20 23:27:49 ЛС | профиль | цитата
3042, Попытайтесь открыть в HiAsm.NET - вдруг чудо произойдёт...

P.S. Notepad++ наше всё - открываем и морщим лоб.

Редактировалось 1 раз(а), последний 2020-01-20 23:29:10
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Ответов: 1926
Рейтинг: 172
#3: 2020-01-21 04:33:12 ЛС | профиль | цитата
Nic писал(а):
P.S. Notepad++ наше всё - открываем и морщим лоб.

Пардон, не понял
карма: 9
0
Главный модератор
Ответов: 2999
Рейтинг: 396
#4: 2020-01-21 07:46:00 ЛС | профиль | цитата
3042 писал(а):
Пардон, не понял

Судя по Вашему сообщению Вы не считаете схему виновной в этих ошибках. Я же наоборот - предлагаю с помощью деления файла схемы на части обнаружить проблемный её кусок и посмотреть какое свойство слетело у элемента. Но делить на части надо текстовым редактором, а не средой HiAsm. Можно ещё "морщить лоб" глядя на текст, но это сложнее - надо иметь навык, чтобы увидеть неправильный код в sha-файле.

Редактировалось 2 раз(а), последний 2020-01-21 09:06:48
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Ответов: 1926
Рейтинг: 172
#5: 2020-01-21 08:56:51 ЛС | профиль | цитата
Nic, схема, думаю, ни при чём. Потому что ошибка начала возникать после того как скопировал кусок этой же схемы в другое место схемы. Видимо, компонентов слишком много. А когда копирую этот же кусок в новую, пустую схему, никакой ошибки там нет.

Я потому в первом посте и написал ссылки на топики, где подобное обсуждалось. Видимо, переполнение какого-то ресурсы, раз даже у Dilma это возникало. nesco тогда обмолвился, высказал идею устранения ошибки, а теперь что-то молчит. Вот и не знаю, куда копать.
карма: 9
0
Главный модератор
Ответов: 2999
Рейтинг: 396
#6: 2020-01-21 09:04:17 ЛС | профиль | цитата
3042 писал(а):
ошибка начала возникать после того как скопировал кусок этой же схемы в другое место схемы

Это подтверждает моё предположение. Копирование и вставка части самой схемы сложный процесс с моей точки зрения как разработчика HiAsm.NET, в котором также есть проблемы с этим.
3042 писал(а):
Видимо, компонентов слишком много

Такого быть не может пока программа не использует предел памяти в 4Гб.

P.S. Обратите внимание на свойства элементов, которые используют ссылки на менеджеры.

Редактировалось 2 раз(а), последний 2020-01-21 09:20:23
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Разработчик
Ответов: 26113
Рейтинг: 2126
#7: 2020-01-21 09:41:47 ЛС | профиль | цитата
3042 писал(а):
что же нужно сделать?

В одном из указанных тобой топиков уже был дан мной ответ
nesco писал(а):
Да я просто предложил один из вариантов решения (но их может быть и не одно), его еще проверить надо.

Ты уже проверил, не помогает. Значит, проблема не в количестве иконок, а в чем-то другом. Некоторые пути решения уже озвучены Nic-ом. Я же с таким больше не сталкивался, поэтому ничего дельного посоветовать не могу.
карма: 22

0
Ответов: 1328
Рейтинг: 69
#8: 2020-01-21 11:27:49 ЛС | профиль | цитата
3042 писал(а):
ошибка начала возникать после того как скопировал кусок этой же схемы в другое место схемы.


была не раз такая проблема при копировании панелей с большим кол-вом вложенных компонентов, теперь сохраняюсь под другим именем перед копированием
карма: 2

0
Ответов: 4628
Рейтинг: 749
#9: 2020-01-21 13:02:15 ЛС | профиль | цитата
3042, посмотри в "Диспетчере задач" значения "Объекты USER" и "Объекты GDI" для процесса HiAsm.
Если там какие-то аномально большие значения (больше 2000) - для "Объекты GDI" можно увеличить лимит.
А для "Объекты USER" - вряд-ли, нужно в самом HiAsm исправлять.



Редактировалось 4 раз(а), последний 2020-01-21 13:03:47
карма: 26

1
Голосовали:3042
Разработчик
Ответов: 26113
Рейтинг: 2126
#10: 2020-01-21 13:05:59 ЛС | профиль | цитата
Netspirit писал(а):
Если там какие-то аномально большие значения (больше 2000) - для "Объекты GDI" можно увеличить лимит

Если это "Объекты GDI", то гнать в шею надо таких разработчиков. Я помню, что у нас тут были любители использовать 100500 интерфейсных элементов на форме.
карма: 22

0
Ответов: 4628
Рейтинг: 749
#11: 2020-01-21 13:15:02 ЛС | профиль | цитата
Само собой. Большие значения должны сообщить разработчику о возможной утечке ресурсов или о неправильной архитектуре программы.
Поскольку программа у нас уже давно не обновляется - то это гиблое дело.

Я, кстати, в своей программе когда-то столкнулся с таким: через некоторое продолжительное время программа падала с ошибкой. Оказалось, в функции отрисовки забыл освобождать хендл региона. Из-за чего переполнялся лимит объектов GDI. Поднятие лимита продлило бы мучения программы, но от ошибки не избавило бы.

Редактировалось 1 раз(а), последний 2020-01-22 18:07:35
карма: 26

0
Главный модератор
Ответов: 2999
Рейтинг: 396
#12: 2020-01-21 14:09:36 ЛС | профиль | цитата
Уважаемые, куда Вас понесло? Речь идёт о designtime работы со схемой в среде HiAsm 4. И, как почти всегда, о схеме пакета Windows (aka delphi).
3042 писал(а):
при открытии теперь вылетает ошибка

99% это говорится про открытие схемы в среде, а не о чём то другом. Парсинг схемы может выдавать ошибки, если они есть в схеме. Также ошибки могут возникать при отображении свойств выделенного элемента на схеме. Поэтому, скорее всего кусок схемы, который был скопирован в саму схему был довольно сложным, чтобы это привело к полученному результату. Уже делал предположение что виноваты менеджеры, но пока это не проверит автор мы не узнаем наверняка.

Редактировалось 1 раз(а), последний 2020-01-21 14:10:06
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Ответов: 4628
Рейтинг: 749
#13: 2020-01-21 16:01:26 ЛС | профиль | цитата
Nic писал(а):
Речь идёт о designtime работы со схемой в среде HiAsm 4
Хм, а кто утверждал обратное?
карма: 26

0
Ответов: 1926
Рейтинг: 172
#14: 2020-01-21 18:36:58 ЛС | профиль | цитата
Netspirit писал(а):
посмотри в "Диспетчере задач" значения "Объекты USER" и "Объекты GDI" для процесса HiAsm

Объекты USER = 195
Объекты GDI = 9 999

nesco писал(а):
были любители использовать 100500 интерфейсных элементов на форме

Ну да, интерфейсных многовато, но от них никуда не деться. К тому же большинство однотипных запихнуты в динамические панели и создаются уже в runtime.

Nic писал(а):
Уже делал предположение что виноваты менеджеры

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

--- Добавлено в 2020-01-21 18:48:13

В общем, попробовал поставить HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\GDIProcessHandleQuota = 20 000.
Вроде получилось: в Диспетчере теперь за 10 000 показывает, но hiasm никаких ошибок не выдаёт.

А по поводу архитектуры программы: что тут ещё сделаешь, если функций много и логика непростая. И так всё, что можно, интерфейсное поубирал в динамические панели, а ещё стараюсь один и тот же кусок использовать для разных функций, меняя только исходные данные. Дальше только одно - вместо связки нескольких компонентов их код просто делать на IC, но это уж совсем извращение.

Редактировалось 1 раз(а), последний 2020-01-21 18:48:13
карма: 9
0
Ответов: 4628
Рейтинг: 749
#15: 2020-01-21 18:48:23 ЛС | профиль | цитата
3042 писал(а):
Объекты GDI = 9 999
В этом проблема. Стандартная квота на процесс - 10000. Какой-то баг в HiAsm, слишком много создаётся объектов и не уничтожается..
3042 писал(а):
К тому же большинство однотипных запихнуты в динамические панели и создаются уже в runtime.
При тысячи и больше окон (панелей) программа начинает жутко тормозить.

Редактировалось 3 раз(а), последний 2020-01-21 18:53:48
карма: 26

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)