Вверх ↑
Этот топик читают: Гость
Ответов: 4621
Рейтинг: 746
#16: 2016-12-13 12:08:40 ЛС | профиль | цитата
Dilma, загляни потом на это обсуждение /topic/61538/19 (начиная с поста #297)
, ответь на вопросы в посте #303
карма: 26

0
Администрация
Ответов: 15294
Рейтинг: 1518
#17: 2016-12-13 22:07:14 ЛС | профиль | цитата
igr писал(а):
а как я могу отправить ее только Вам?

Можно на почту скинуть - support@hiasm.com
карма: 26
0
Ответов: 278
Рейтинг: 6
#18: 2016-12-14 00:18:43 ЛС | профиль | цитата
Dilma, отправил.
карма: 0

0
Администрация
Ответов: 15294
Рейтинг: 1518
#19: 2016-12-14 14:52:10 ЛС | профиль | цитата
igr, поковырял немного схему: падение с ошибкой происходит из-за расходования всех ресурсов GDI (графическая подсистема древних Windows). Практически все нестандартные элементы среды для своей отрисовки резервируют ресурсы этого самого GDI - шрифты, кисти(заливка), карандаши(рисование линий) и т.д. - поэтому переполнение схемы такими элементами рано или поздно приводит к проблеме (скажем достаточно создать много LineBreak). Исправить это без переделывания всего графического движка невозможно. Хотя и возможно было бы улучшить ситуацию, если использовать общие ресурсы между элементами.

Что касается быстродействия: копирование указанного куска в схеме происходит очень долго и его окончания я ни разу не дождался в виду падения с ошибкой, но одна лишь эта форма:



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

И наконец попробовал открыть схему в Hion:



Открывается конечно же дольше, чем в HiAsm - примерно пол минуты. Зато выделенный кусок схемы копируется примерно за 4 секунды и соответственно никаких падений вкладки браузера нет, 100 000 элементов держит без проблем:



Очевидно, что тут все ограничено исключительно объемом памяти, доступной браузеру.

Редактировалось 1 раз(а), последний 2016-12-14 14:53:02
карма: 26
1
Голосовали:igr
Ответов: 4621
Рейтинг: 746
#20: 2016-12-14 15:40:55 ЛС | профиль | цитата
Dilma писал(а):
падение с ошибкой происходит из-за расходования всех ресурсов GDI
Частичное решение - повысить количество допустимых хендлов на процесс в этом ключе: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\GDIProcessHandleQuota (макс. 655365). Иногда чрезмерно большое количество открытых хендлов в программе свидетельствует об утечке ресурсов.

Редактировалось 2 раз(а), последний 2016-12-14 16:31:13
карма: 26

0
Администрация
Ответов: 15294
Рейтинг: 1518
#21: 2016-12-14 15:45:57 ЛС | профиль | цитата
Netspirit писал(а):
макс. 65536

Если это ограничение на все типы, а не каждый в отдельности, то это очень мало - все элементы используют от 2 до 3х хендлов на отрисовку (кисть, карандаш и шрифт), т.е. всего-то и надо 20-30к таких элементов и схема грузиться не будет.
карма: 26
0
Ответов: 4621
Рейтинг: 746
#22: 2016-12-14 16:30:37 ЛС | профиль | цитата
Это относительно мало. А в общем случае, это скорее всего неправильный алгоритм программы. Например, по событию рисования нам нужно нарисовать элемент в окне. Для этого мы создаём Pen, Brush, Font, Region на требуемом HDC (Canvas) выполняем рисование и удаляем эти объекты, как ненужные. Затем начинает отрисовку следующий элемент, который выполняет те же действия - вот и получается не так уж и много объектов. Даже если нам нужно в процессе отрисовки нарисовать 10 линий разным цветом - мы создаём 1 Pen, рисуем им, уничтожаем, создаём 2-ой Pen и т.д. Количество объектов может возрастать, например, если наши элементы создают объекты GDI и сохраняют их на протяжении всей своей жизни (в целях оптимизации или ещё чего) или если где-то забыли прописать уничтожение ненужного объекта. Но это можно оптимизировать. Например, компонент может уничтожать свои объекты GDI как только он уходит из зоны видимости (за видимые границы схемы, выход из контейнера и т.п.) и его отрисовка уже не требуется. И то, это требуется только если каждый компонент рисует себя сам. А если отрисовкой всех компонентов занимается одна и та же процедура, то этой проблемы вообще быть не должно.

Редактировалось 1 раз(а), последний 2016-12-14 16:35:08
карма: 26

0
Администрация
Ответов: 15294
Рейтинг: 1518
#23: 2016-12-14 16:42:21 ЛС | профиль | цитата
Netspirit, какой смысл рассказывать, как надо, если это уже давно сделано во всех средах после hiasm4?
карма: 26
0
Ответов: 4621
Рейтинг: 746
#24: 2016-12-14 17:00:25 ЛС | профиль | цитата
Ну, хорошо, что сделано. А смысл был только в рассуждении почему 65535, и даже стандартные 10000 - это "не мало".
карма: 26

0
Ответов: 278
Рейтинг: 6
#25: 2016-12-14 17:05:28 ЛС | профиль | цитата
Dilma, спасибо, буду помнить при построении больших схем.

Не знал что тут (http://ide.hiasm.com/) можно открыть все эти компоненты.
Не могу сейчас попробовать. Не отвечает страница. Что 1-2 раза в день бывает с форумом последнее время

Dilma писал(а):
какой смысл рассказывать, как надо, если это уже давно сделано во всех средах после hiasm4?

Вы имеете ввиду что в 5-й версии нет таких проблем?

Dilma писал(а):
во всех средах после hiasm4?

Я наверное не в теме. Не думал что после 4 еще несколько сред, только про 5 читал. Пользуюсь 4 потому что где-то давно прочитал что под 5 не все компоненты есть.

Скажите, в Hion можно полноценно работать, или есть какие то недостатки?

Почитал форум. Понял.

Редактировалось 2 раз(а), последний 2016-12-14 17:18:19
карма: 0

0
Администрация
Ответов: 15294
Рейтинг: 1518
#26: 2016-12-14 17:41:04 ЛС | профиль | цитата
Netspirit писал(а):
А смысл был только в рассуждении почему 65535, и даже стандартные 10000 - это "не мало".

Netspirit, смысл в том, что при такой реализации GDI, какая она есть в Windows встает вопрос - а что нам важнее: быстродействие или память? Когда этот вопрос встал, то был выбран первый ответ и элементы строились таким образом, чтобы максимально быстро рисовать себя на холсте, т.е. создавали все нужные дескрипторы один раз. Ни в одной другой реализации графического API я такого больше никогда не видел и везде оно работает либо по принципу конечного автомата (т.е. цвета, стили и прочие атрибуты задаются напрямую холсту), либо с подготовкой нужный структур, которые лежат в оперативной памяти и являются простыми переменными. Зачем так было сделано - не известно, вероятно это просто наследие времен Windows 3.11.

igr писал(а):
Не знал что тут (http://ide.hiasm.com/) можно открыть все эти компоненты.

Тут их еще нельзя открывать и не скоро такая возможность появится.

igr писал(а):
Вы имеете ввиду что в 5-й версии нет таких проблем?

Таких нет, но и пакет Windows там не поддерживается.

igr писал(а):
Скажите, в Hion можно полноценно работать, или есть какие то недостатки?

Работать для создания WEB приложений в нем можно. Другие пакеты на данный момент не поддерживаются. В будущем будет и поддержка других пакетов, и standalone версия (т.е. устанавливаемая на компьютер и не требующая интернета для работы).
карма: 26
0
26
Сообщение
...
Прикрепленные файлы
(файлы не залиты)