Dilma, загляни потом на это обсуждение /topic/61538/19 (начиная с поста #297)
, ответь на вопросы в посте #303
Этот топик читают: Гость
Ответов: 4630
Рейтинг: 749
|
|||
карма: 26 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
igr писал(а): а как я могу отправить ее только Вам?Можно на почту скинуть - support@hiasm.com |
|||
карма: 27 |
|
Ответов: 278
Рейтинг: 6
|
|||
Dilma, отправил.
|
|||
карма: 0 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
igr, поковырял немного схему: падение с ошибкой происходит из-за расходования всех ресурсов GDI (графическая подсистема древних Windows). Практически все нестандартные элементы среды для своей отрисовки резервируют ресурсы этого самого GDI - шрифты, кисти(заливка), карандаши(рисование линий) и т.д. - поэтому переполнение схемы такими элементами рано или поздно приводит к проблеме (скажем достаточно создать много LineBreak). Исправить это без переделывания всего графического движка невозможно. Хотя и возможно было бы улучшить ситуацию, если использовать общие ресурсы между элементами.
Что касается быстродействия: копирование указанного куска в схеме происходит очень долго и его окончания я ни разу не дождался в виду падения с ошибкой, но одна лишь эта форма: копируется около двух минут. С этим вероятно тоже что-либо сделать можно, т.к. основные тормоза происходят из-за того, что внутренности каждой схемы выделяются после вставки и срабатывает цепочка тригеров, которые обновляют состояние GUI (панель свойств, дерево элементов, состояние всех команд и т.д.) из-за чего время катастрофически растягивается. И наконец попробовал открыть схему в Hion: Открывается конечно же дольше, чем в HiAsm - примерно пол минуты. Зато выделенный кусок схемы копируется примерно за 4 секунды и соответственно никаких падений вкладки браузера нет, 100 000 элементов держит без проблем: Очевидно, что тут все ограничено исключительно объемом памяти, доступной браузеру. Редактировалось 1 раз(а), последний 2016-12-14 14:53:02 |
|||
карма: 27 |
| ||
Голосовали: | igr |
Ответов: 4630
Рейтинг: 749
|
|||
Dilma писал(а): падение с ошибкой происходит из-за расходования всех ресурсов GDIРедактировалось 2 раз(а), последний 2016-12-14 16:31:13 |
|||
карма: 26 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Netspirit писал(а): макс. 65536Если это ограничение на все типы, а не каждый в отдельности, то это очень мало - все элементы используют от 2 до 3х хендлов на отрисовку (кисть, карандаш и шрифт), т.е. всего-то и надо 20-30к таких элементов и схема грузиться не будет. |
|||
карма: 27 |
|
Ответов: 4630
Рейтинг: 749
|
|||
Это относительно мало. А в общем случае, это скорее всего неправильный алгоритм программы. Например, по событию рисования нам нужно нарисовать элемент в окне. Для этого мы создаём Pen, Brush, Font, Region на требуемом HDC (Canvas) выполняем рисование и удаляем эти объекты, как ненужные. Затем начинает отрисовку следующий элемент, который выполняет те же действия - вот и получается не так уж и много объектов. Даже если нам нужно в процессе отрисовки нарисовать 10 линий разным цветом - мы создаём 1 Pen, рисуем им, уничтожаем, создаём 2-ой Pen и т.д. Количество объектов может возрастать, например, если наши элементы создают объекты GDI и сохраняют их на протяжении всей своей жизни (в целях оптимизации или ещё чего) или если где-то забыли прописать уничтожение ненужного объекта. Но это можно оптимизировать. Например, компонент может уничтожать свои объекты GDI как только он уходит из зоны видимости (за видимые границы схемы, выход из контейнера и т.п.) и его отрисовка уже не требуется. И то, это требуется только если каждый компонент рисует себя сам. А если отрисовкой всех компонентов занимается одна и та же процедура, то этой проблемы вообще быть не должно.
Редактировалось 1 раз(а), последний 2016-12-14 16:35:08 |
|||
карма: 26 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Netspirit, какой смысл рассказывать, как надо, если это уже давно сделано во всех средах после hiasm4?
|
|||
карма: 27 |
|
Ответов: 4630
Рейтинг: 749
|
|||
Ну, хорошо, что сделано. А смысл был только в рассуждении почему 65535, и даже стандартные 10000 - это "не мало".
|
|||
карма: 26 |
|
Ответов: 278
Рейтинг: 6
|
|||
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 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Netspirit писал(а): А смысл был только в рассуждении почему 65535, и даже стандартные 10000 - это "не мало".Netspirit, смысл в том, что при такой реализации GDI, какая она есть в Windows встает вопрос - а что нам важнее: быстродействие или память? Когда этот вопрос встал, то был выбран первый ответ и элементы строились таким образом, чтобы максимально быстро рисовать себя на холсте, т.е. создавали все нужные дескрипторы один раз. Ни в одной другой реализации графического API я такого больше никогда не видел и везде оно работает либо по принципу конечного автомата (т.е. цвета, стили и прочие атрибуты задаются напрямую холсту), либо с подготовкой нужный структур, которые лежат в оперативной памяти и являются простыми переменными. Зачем так было сделано - не известно, вероятно это просто наследие времен Windows 3.11. igr писал(а): Не знал что тут (http://ide.hiasm.com/) можно открыть все эти компоненты.Тут их еще нельзя открывать и не скоро такая возможность появится. igr писал(а): Вы имеете ввиду что в 5-й версии нет таких проблем?Таких нет, но и пакет Windows там не поддерживается. igr писал(а): Скажите, в Hion можно полноценно работать, или есть какие то недостатки?Работать для создания WEB приложений в нем можно. Другие пакеты на данный момент не поддерживаются. В будущем будет и поддержка других пакетов, и standalone версия (т.е. устанавливаемая на компьютер и не требующая интернета для работы). |
|||
карма: 27 |
|
26