|
|
|
Быстрое создание форм
|
|||
|---|---|---|---|
|
#18+
В проекте создается 200 инстансов одной формы (тяжелое наследие) примерно таким кодом Код: pascal 1. 2. В итоге на это все уходит 12 секунд. "Тормозит" метод ReadState. Т.е. непосредственно вычитывание формы из dfm. Можно это как-то ускорить? Про создавать одну форму и перенастраивать ее знаю. Когда-то сделаю. Создавать форму при первом обращении к ней, пожалуй, еще сложнее, чем создавать одну. Тяжелый легаси код. Сейчас интересует именно как ускорить чтение dfm. Может Можно как-то клонировать уже созданную форму? С уважением, Vasilisk ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 15:06 |
|
||
|
Быстрое создание форм
|
|||
|---|---|---|---|
|
#18+
Повесить окно "Загрузка форм" Это значительно ускорит процесс чтения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 15:08 |
|
||
|
Быстрое создание форм
|
|||
|---|---|---|---|
|
#18+
DimaBr Повесить окно "Загрузка форм" Это значительно ускорит процесс чтения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 15:09 |
|
||
|
Быстрое создание форм
|
|||
|---|---|---|---|
|
#18+
Если 200 форм не видны на экране, то зачем их создавать ? Проще потратить время на вычистку Автосоздаваемых форм, чтем пытаться что-то изменить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 15:10 |
|
||
|
Быстрое создание форм
|
|||
|---|---|---|---|
|
#18+
DimaBr Проще потратить время на вычистку Автосоздаваемых форм, чтем пытаться что-то изменить DimaBr Если 200 форм не видны на экране, то зачем их создавать ? Еще раз _Vasilisk_ Про создавать одну форму и перенастраивать ее знаю. Когда-то сделаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 15:18 |
|
||
|
Быстрое создание форм
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Сейчас интересует именно как ускорить чтение dfm вы точно уверены, что именно чтение .dfm занимает столько время, а не пост-обработка? Возможно, там дело в датасетах, у которых свойство .Active = true. Или еще что-нибудь долгое происходит в конструкторе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 15:23 |
|
||
|
Быстрое создание форм
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, создавать контролы в рантайме? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 15:24 |
|
||
|
Быстрое создание форм
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Чтобы пользователь не нервничал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 15:27 |
|
||
|
Быстрое создание форм
|
|||
|---|---|---|---|
|
#18+
Кроик Семён вы точно уверены, что именно чтение .dfm занимает столько время, а не пост-обработка? Кроик Семён Возможно, там дело в датасетах, Кроик Семён Или еще что-нибудь долгое происходит в конструкторе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 15:28 |
|
||
|
Быстрое создание форм
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, автовыравнивание/сайзинг контролов на форме используется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 15:30 |
|
||
|
Быстрое создание форм
|
|||
|---|---|---|---|
|
#18+
vavan автовыравнивание/сайзинг контролов на форме используется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 15:39 |
|
||
|
Быстрое создание форм
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Да. Массово ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 15:43 |
|
||
|
Быстрое создание форм
|
|||
|---|---|---|---|
|
#18+
Не лечите йодом, лучше рубите. Лучше день потерять, потом за 5 минут долететь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 15:47 |
|
||
|
Быстрое создание форм
|
|||
|---|---|---|---|
|
#18+
vavan думаю это скорости тоже не добавляет Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 15:49 |
|
||
|
Быстрое создание форм
|
|||
|---|---|---|---|
|
#18+
DimaBr Не лечите йодом, лучше рубите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 15:50 |
|
||
|
Быстрое создание форм
|
|||
|---|---|---|---|
|
#18+
Каждая форма привязана к управляющему объекту. И для каждого объекта создается своя форма. Потом показывается форма для выбранного объекта. При изменении состояния объекта он изменяет что-то на своей форме Мне это напоминает пост про шестиугольники. Вместо того чтобы нарисовать 200 объектов на одной канве, человек создаёт 200 контролов, потому что ОДИН нужно двигать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 15:51 |
|
||
|
Быстрое создание форм
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_> В проекте создается 200 инстансов одной формы (тяжелое наследие) В сторону - меня всегда удивляли дебри, в которых ты оказываешься и пытаешься выбраться. Это то прежнее место работы или уже новое? _Vasilisk_> "Тормозит" ... вычитывание формы из dfm. Можно это как-то ускорить? Можно, вариантов несколько. 1. Переработать архитектуру от вычитывания 200 форм. При чём вряд ли "не создавать одну и перенастраивать" - ибо тогда все объекты будут в очереди к 1 инстансу? Я бы скорее предложил создавать (вычитывать из dfm) 1 форму, а потом в цикле создавать новые чистые инстансы и клонировать/копировать в них первую форму. 2. Сделать своего наследника, который читать будет не из dfm, а из своего стрима - с учетом файлового кеша не знаю насколько это ускорит, но проверить как вариант можно. 3. Сделать своего наследника, который будет не читать из dfm, а тупо клонировать объект, переданный параметром - этакая вариация п.1. _Vasilisk_> Создавать форму при первом обращении к ней, _Vasilisk_> пожалуй, еще сложнее, чем создавать одну. Это я не понял. _Vasilisk_> Может Можно как-то клонировать уже созданную форму? Конечно, можно. RTTI, например. В последних версиях и готовые методы появились, наверное. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 16:16 |
|
||
|
Быстрое создание форм
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ В проекте создается 200 инстансов одной формы (тяжелое наследие) Я не спрашиваю, кто это придумал - и так ясно, что инопланетянин. Но мне очень интересно - зачем? Какую задачу он решал таким образом? _Vasilisk_ "Тормозит" метод ReadState. Точно он сам? Или таки выполнение различных методов свойств и прочих инициализаций из него? _Vasilisk_ Т.е. непосредственно вычитывание формы из dfm. Можно это как-то ускорить Единственное, что мне приходит в голову - взять из Classes.pas исходники TReader и на их основе сделать свой reader, применяющий каждую считанную строчку к 200-м формам разом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 16:27 |
|
||
|
Быстрое создание форм
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам Это то прежнее место работы или уже новое? Гаджимурадов Рустам При чём вряд ли "не создавать одну и перенастраивать" - ибо тогда все объекты будут в очереди к 1 инстансу? Гаджимурадов Рустам Я бы скорее предложил создавать (вычитывать из dfm) 1 форму, а потом в цикле создавать новые чистые инстансы и клонировать/копировать в них первую форму. Гаджимурадов Рустам 2. Сделать своего наследника, который читать будет не из dfm, а из своего стрима - с учетом файлового кеша не знаю насколько это ускорит, но проверить как вариант можно. Гаджимурадов Рустам _Vasilisk_> Создавать форму при первом обращении к ней, _Vasilisk_> пожалуй, еще сложнее, чем создавать одну. Это я не понял Код: pascal 1. 2. 3. 4. 5. 6. Гаджимурадов Рустам Конечно, можно. RTTI, например Гаджимурадов Рустам В последних версиях и готовые методы появились, наверное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 16:32 |
|
||
|
Быстрое создание форм
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам _Vasilisk_> Может Можно как-то клонировать уже созданную форму? Конечно, можно. RTTI, например. В последних версиях и готовые методы появились, наверное. Я думаю, коллеге стоит уточнить вопрос: "Можно ли клонировать уже созданную форму так, чтобы это получилось быстрее, чем десериализацией?" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 16:34 |
|
||
|
Быстрое создание форм
|
|||
|---|---|---|---|
|
#18+
softwarer Но мне очень интересно - зачем? Какую задачу он решал таким образом? softwarer Точно он сам? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 16:39 |
|
||
|
Быстрое создание форм
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Ну как точно? В Classes тайминги особо не поставишь. Думаю, если скомпилировать с отладочными dcu, AQTime ответил на этот вопрос. А так очень легко может быть, что оптимизироваться будет то, что и так проскакивает за доли секунды. _Vasilisk_ Смотрю по двум чекпойнам: вызов TForm.ReadState и вызов TForm.Loaded. По идее, вся инициализация должна происходить в методе Loaded Это какая-то в высшей степени странная идея. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 16:44 |
|
||
|
Быстрое создание форм
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_> Вот этого и хочу. RTFM что? И куда смотреть? _Vasilisk_> Тупо рекурсивно перебирать все published свойства _Vasilisk_> и копировать их с эталона? Типа того, там несложно. Примеры приводились и у нас IIRC, и на SO наверняка есть. Я помню упоминания, что соотв. код есть где-то и внутрях VCL (или RTL), но в каком методе - искать лень. Для примера https://habr.com/en/post/204678 _Vasilisk_> А смысл? Если dfm тянется из ресурсов экзешника, который _Vasilisk_> уже загружен в память. Где здесь вообще файловая система? Ну да, считай то же самое. Я думал ты их снаружи (из БД и пр.) читаешь, собираешь. Тогда забудь. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 16:47 |
|
||
|
Быстрое создание форм
|
|||
|---|---|---|---|
|
#18+
softwarer> чтобы это получилось быстрее, чем десериализацией?" Это довольно редкая прикладная задача: если кто-то не сталкивался с ней реально - вряд ли сможет подсказать точно. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 16:48 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39923550&tid=2038564]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 213ms |
| total: | 335ms |

| 0 / 0 |
