Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2 3      [все]
 Быстрое создание форм  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11498
В проекте создается 200 инстансов одной формы (тяжелое наследие) примерно таким кодом
for i := 0 to 200 do
  MyForm := TMyForm.Create;


В итоге на это все уходит 12 секунд. "Тормозит" метод ReadState. Т.е. непосредственно вычитывание формы из dfm. Можно это как-то ускорить?

Про создавать одну форму и перенастраивать ее знаю. Когда-то сделаю. Создавать форму при первом обращении к ней, пожалуй, еще сложнее, чем создавать одну. Тяжелый легаси код. Сейчас интересует именно как ускорить чтение dfm. Может Можно как-то клонировать уже созданную форму?

С уважением, Vasilisk
6 фев 20, 15:06    [22074819]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
DimaBr
Member

Откуда:
Сообщений: 11496
Повесить окно "Загрузка форм"
Это значительно ускорит процесс чтения
6 фев 20, 15:08    [22074823]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11498
DimaBr
Повесить окно "Загрузка форм"
Это значительно ускорит процесс чтения
Это в смысле шутка такая? Чтобы пользователь не нервничал?
6 фев 20, 15:09    [22074828]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
DimaBr
Member

Откуда:
Сообщений: 11496
Если 200 форм не видны на экране, то зачем их создавать ?
Проще потратить время на вычистку Автосоздаваемых форм, чтем пытаться что-то изменить
6 фев 20, 15:10    [22074829]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11498
DimaBr
Проще потратить время на вычистку Автосоздаваемых форм, чтем пытаться что-то изменить
Они не в автосоздаваемых формах
DimaBr
Если 200 форм не видны на экране, то зачем их создавать ?
Каждая форма привязана к управляющему объекту. И для каждого объекта создается своя форма. Потом показывается форма для выбранного объекта. При изменении состояния объекта он изменяет что-то на своей форме.

Еще раз
_Vasilisk_
Про создавать одну форму и перенастраивать ее знаю. Когда-то сделаю.
6 фев 20, 15:18    [22074840]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
Кроик Семён
Member

Откуда: СПб --> Dortmund
Сообщений: 6599
_Vasilisk_
Сейчас интересует именно как ускорить чтение dfm


вы точно уверены, что именно чтение .dfm занимает столько время, а не пост-обработка?

Возможно, там дело в датасетах, у которых свойство .Active = true. Или еще что-нибудь долгое происходит в конструкторе.
6 фев 20, 15:23    [22074848]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
Zelius
Member

Откуда: Россия, Москва
Сообщений: 1411
_Vasilisk_,

создавать контролы в рантайме?
6 фев 20, 15:24    [22074850]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
vavan
Member

Откуда: Казань
Сообщений: 3474
_Vasilisk_
Чтобы пользователь не нервничал?
да, за наблюдением анимации прогресса им возможно будет комфортнее
6 фев 20, 15:27    [22074858]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11498
Кроик Семён
вы точно уверены, что именно чтение .dfm занимает столько время, а не пост-обработка?
Да. Основное время это между вызовом ReadState и до вызова Loaded
Кроик Семён
Возможно, там дело в датасетах,
Их на форме нет вообще
Кроик Семён
Или еще что-нибудь долгое происходит в конструкторе.
FormCreate для всех форм в сумме выполняется за 600 миллисекунд
6 фев 20, 15:28    [22074859]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
vavan
Member

Откуда: Казань
Сообщений: 3474
_Vasilisk_, автовыравнивание/сайзинг контролов на форме используется?
6 фев 20, 15:30    [22074861]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11498
vavan
автовыравнивание/сайзинг контролов на форме используется?
Да. Массово
6 фев 20, 15:39    [22074873]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
vavan
Member

Откуда: Казань
Сообщений: 3474
_Vasilisk_
Да. Массово
думаю это скорости тоже не добавляет
6 фев 20, 15:43    [22074879]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
DimaBr
Member

Откуда:
Сообщений: 11496
Не лечите йодом, лучше рубите.
Лучше день потерять, потом за 5 минут долететь.
6 фев 20, 15:47    [22074886]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11498
vavan
думаю это скорости тоже не добавляет
По исходникам как бы так
procedure TCustomForm.ReadState(Reader: TReader);
var
  NewTextHeight: Integer;
  Scaled: Boolean;
begin
  DisableAlign;
  try
    ..............
    inherited ReadState(Reader);
    ..............
  finally
    EnableAlign;
  end;
end;
6 фев 20, 15:49    [22074890]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11498
DimaBr
Не лечите йодом, лучше рубите.
Да похоже, что все к тому идет
6 фев 20, 15:50    [22074892]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
DimaBr
Member

Откуда:
Сообщений: 11496
Каждая форма привязана к управляющему объекту. И для каждого объекта создается своя форма. Потом показывается форма для выбранного объекта. При изменении состояния объекта он изменяет что-то на своей форме

Мне это напоминает пост про шестиугольники.
Вместо того чтобы нарисовать 200 объектов на одной канве, человек создаёт 200 контролов, потому что ОДИН нужно двигать

Сообщение было отредактировано: 6 фев 20, 15:53
6 фев 20, 15:51    [22074893]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 60872
_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

6 фев 20, 16:16    [22074917]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 60752
Блог
_Vasilisk_
В проекте создается 200 инстансов одной формы (тяжелое наследие)

Я не спрашиваю, кто это придумал - и так ясно, что инопланетянин. Но мне очень интересно - зачем? Какую задачу он решал таким образом?

_Vasilisk_
"Тормозит" метод ReadState.

Точно он сам? Или таки выполнение различных методов свойств и прочих инициализаций из него?

_Vasilisk_
Т.е. непосредственно вычитывание формы из dfm. Можно это как-то ускорить

Единственное, что мне приходит в голову - взять из Classes.pas исходники TReader и на их основе сделать свой reader, применяющий каждую считанную строчку к 200-м формам разом.
6 фев 20, 16:27    [22074922]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11498
Гаджимурадов Рустам
Это то прежнее место работы или уже новое?
Прежнее. Проект огромен и куски рефракторятся только если прижмет и есть свободное время.
Гаджимурадов Рустам
При чём вряд ли "не создавать одну и перенастраивать" - ибо тогда все объекты будут в очереди к 1 инстансу?
Там даже очередей не нужно будет. Нет формы - ничего не делаем. Только потом когда форма у объекта появится ее нужно будет довести до текущего состояния объекта
Гаджимурадов Рустам
Я бы скорее предложил создавать (вычитывать из dfm) 1 форму, а потом в цикле создавать новые чистые инстансы и клонировать/копировать в них первую форму.
Вот этого и хочу. RTFM что?
Гаджимурадов Рустам
2. Сделать своего наследника, который читать будет не из dfm, а из своего стрима - с учетом файлового кеша не знаю насколько это ускорит, но проверить как вариант можно.
А смысл? Если dfm тянется из ресурсов экзешника, который уже загружен в память. Где здесь вообще файловая система?
Гаджимурадов Рустам
_Vasilisk_> Создавать форму при первом обращении к ней,
_Vasilisk_> пожалуй, еще сложнее, чем создавать одну.
Это я не понял
function TMyObject.GetForm: TMyForm;
begin
  if  FForm = nil then
    FForm := TMyForm.Create(nil);
  Result := FForm;
end;

Гаджимурадов Рустам
Конечно, можно. RTTI, например
И куда смотреть? Тупо рекурсивно перебирать все published свойства и копировать их с эталона?
Гаджимурадов Рустам
В последних версиях и готовые методы появились, наверное.
Пока XE3
6 фев 20, 16:32    [22074928]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 60752
Блог
Гаджимурадов Рустам
_Vasilisk_> Может Можно как-то клонировать уже созданную форму?

Конечно, можно. RTTI, например. В последних версиях и
готовые методы появились, наверное.

Я думаю, коллеге стоит уточнить вопрос: "Можно ли клонировать уже созданную форму так, чтобы это получилось быстрее, чем десериализацией?"
6 фев 20, 16:34    [22074931]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11498
softwarer
Но мне очень интересно - зачем? Какую задачу он решал таким образом?
Независимость отображения каждого объекта. На старте проекта объектов было не более 10.
softwarer
Точно он сам?
Ну как точно? В Classes тайминги особо не поставишь. Смотрю по двум чекпойнам: вызов TForm.ReadState и вызов TForm.Loaded. По идее, вся инициализация должна происходить в методе Loaded
6 фев 20, 16:39    [22074935]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 60752
Блог
_Vasilisk_
Ну как точно? В Classes тайминги особо не поставишь.

Думаю, если скомпилировать с отладочными dcu, AQTime ответил на этот вопрос. А так очень легко может быть, что оптимизироваться будет то, что и так проскакивает за доли секунды.

_Vasilisk_
Смотрю по двум чекпойнам: вызов TForm.ReadState и вызов TForm.Loaded. По идее, вся инициализация должна происходить в методе Loaded

Это какая-то в высшей степени странная идея.
6 фев 20, 16:44    [22074943]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 60872
_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

6 фев 20, 16:47    [22074949]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 60872
softwarer> чтобы это получилось быстрее, чем десериализацией?"

Это довольно редкая прикладная задача: если кто-то не
сталкивался с ней реально - вряд ли сможет подсказать точно.

Posted via ActualForum NNTP Server 1.5

6 фев 20, 16:48    [22074951]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11498
softwarer
AQTime
Где его искать? Он вроде установлен, но я нигде его не вижу
6 фев 20, 16:55    [22074959]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
vavan
Member

Откуда: Казань
Сообщений: 3474
_Vasilisk_
По исходникам как бы так
тогда может я и мимо, просто вспомнилось что где-то вроде с этим впирался
6 фев 20, 17:34    [22074994]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11498
softwarer
AQTime
Падает программа при запуске из под профайлера. Стандартное Windows сообщение "Работа программы прекращена"

Имя сбойного модуля: AQNATPROF.DLL, версия: 7.50.1260.86, метка времени: 0x503f5b51
Код исключения: 0xc00001a5
Путь сбойного модуля: C:\PROGRAM FILES (X86)\SMARTBEAR\AQTIME 7\BIN\EXTENSIONS\AQNATPROF.DLL


Сообщение было отредактировано: 6 фев 20, 17:55
6 фев 20, 17:54    [22075022]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 60752
Блог
_Vasilisk_
softwarer
AQTime
Падает программа при запуске из под профайлера. Стандартное Windows сообщение "Работа программы прекращена"

Ну что я могу сказать... ошибка в не в профайлере :)
6 фев 20, 17:55    [22075026]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11498
softwarer
Ну что я могу сказать... ошибка в не в профайлере :)
Ну не знаю
_Vasilisk_
Путь сбойного модуля: C:\PROGRAM FILES (X86)\SMARTBEAR\AQTIME 7\BIN\EXTENSIONS\AQNATPROF.DLL
6 фев 20, 17:57    [22075032]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
vavan
Member

Откуда: Казань
Сообщений: 3474
_Vasilisk_
Падает программа при запуске из под профайлера
7-я ломаная мне не попадалась но и 5 и 6 тоже бывало стабильно валились, обходил помнится аттачем к уже запущенному процессу
6 фев 20, 18:23    [22075047]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11498
vavan
обходил помнится аттачем к уже запущенному процессу
How AQtime Standard for Embarcadero RAD Studio XE Differs From AQtime Pro
...............
The “Attach-to-Process” feature is not available, that is, you cannot attach to existing processes. To profile an application, you have to run it from AQtime.
6 фев 20, 18:33    [22075056]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
Василий 2
Member

Откуда:
Сообщений: 959
Можно перекрыть ReadState и отложить реальную загрузку контролов по времени (таймер, onIdle и т.д.).
Можно подменить переменную формы ленивой загрузкой:
var _frmMy: TMyForm = nil;

function frmMy: TMyForm;
  if _frmMy = nil then
    _frmMy := TMyForm.Create;
 Exit(_frmMy)
6 фев 20, 18:49    [22075070]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
L1G
Member

Откуда:
Сообщений: 110
_Vasilisk_, я бы попробовал сконвертить dfm в код. Если тормозит именно десериализация, то должно ускориться.
Помнится, была утилитка под названием "dfm2pas" и в GExpert'ах был пункт меню для этого.
Возможно, оба варианта устарели и лучше поискать что-нибудь поновее для этого.
6 фев 20, 22:10    [22075172]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
Ghost Writer
Member

Откуда: Россия
Сообщений: 896
_Vasilisk_
Сейчас интересует именно как ускорить чтение dfm. Может Можно как-то клонировать уже созданную форму?
Не знаю, быстрее ли это. Просто вспомнил, что есть такое
http://delphiworld.narod.ru/base/clone_form.html
6 фев 20, 23:45    [22075220]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
DimaBr
Member

Откуда:
Сообщений: 11496
Ghost Writer
Не знаю, быстрее ли это. Просто вспомнил, что есть такое
http://delphiworld.narod.ru/base/clone_form.html

Это не может быть быстрее
ms.ReadComponent(newform);
7 фев 20, 00:38    [22075228]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
LocksmithPC
Member

Откуда:
Сообщений: 223
При изменении состояния объекта он изменяет что-то на своей форме

Объект не должен знать ни о каких формах. Он должен изменять свои свойства. Одна единственная форма должна подключаться к любому объекту и в зависимости от свойств рисовать себя и на себе что надо.
7 фев 20, 06:03    [22075260]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
Василий 2
Member

Откуда:
Сообщений: 959
L1G
_Vasilisk_, я бы попробовал сконвертить dfm в код. Если тормозит именно десериализация, то должно ускориться.
Помнится, была утилитка под названием "dfm2pas" и в GExpert'ах был пункт меню для этого.
Возможно, оба варианта устарели и лучше поискать что-нибудь поновее для этого.

А смысл? Десериализация именно это и делает.
7 фев 20, 10:27    [22075349]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
vavan
Member

Откуда: Казань
Сообщений: 3474
LocksmithPC
Одна единственная форма должна подключаться к любому объекту
Так может они там одновременно открыты
7 фев 20, 10:33    [22075356]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
alekcvp
Member

Откуда:
Сообщений: 1849
vavan
LocksmithPC
Одна единственная форма должна подключаться к любому объекту
Так может они там одновременно открыты

Все 100+?
В любом случае, если создавать форму в момент открытия, то тормоза будут не так заметны, как создание 100+ форм при загрузке приложения.
7 фев 20, 10:55    [22075372]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
vavan
Member

Откуда: Казань
Сообщений: 3474
alekcvp
Все 100+?
я не в курсе. указываю что "одной единственной" всяко может не хватить
7 фев 20, 11:31    [22075446]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
LocksmithPC
Member

Откуда:
Сообщений: 223
vavan
alekcvp
Все 100+?
я не в курсе. указываю что "одной единственной" всяко может не хватить


Не надо цепляться к словам. Если это информтабло сотни объектов, то нужна одна форма (№1) для мониторинга этой сотни и одна форма (№2) для детализации. Пусть форм №2 будет несколько, если надо сравнить детализацию 15 объектов
7 фев 20, 12:00    [22075472]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
vavan
Member

Откуда: Казань
Сообщений: 3474
LocksmithPC, я и не цепляюсь а лишь указываю что OP там виднее как оно бывает
7 фев 20, 13:17    [22075558]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 60872
L1G> сконвертить dfm в код. Если тормозит именно десериализация, то должно ускориться.
L1G> Помнится, была утилитка под названием "dfm2pas" и в GExpert'ах был пункт меню для этого.

Интересная идея, кстати. "Хардкодирование" вместо "клонирования".

Попробовать стоит, ИМХО.

Posted via ActualForum NNTP Server 1.5

7 фев 20, 14:46    [22075631]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11498
Гаджимурадов Рустам
Интересная идея, кстати. "Хардкодирование" вместо "клонирования".
Попробовать стоит, ИМХО.
Я тут подумал, что все идеи с копированием свойств через RTTI, конвертацией dfm в pas быстрее не будут.

Например, банальная установка координат компонента

procedure TControl.SetLeft(Value: Integer);
begin
  SetBounds(Value, FTop, FWidth, FHeight);
  Include(FScalingFlags, sfLeft);
  if csReading in ComponentState then
    FExplicitLeft := FLeft;
end;

procedure TControl.SetBounds(ALeft, ATop, AWidth, AHeight: Integer);
begin
  if CheckNewSize(AWidth, AHeight) and
    ((ALeft <> FLeft) or (ATop <> FTop) or
    (AWidth <> FWidth) or (AHeight <> FHeight)) then
  begin
    InvalidateControl(Visible, False);
    FLeft := ALeft;
    FTop := ATop;
    FWidth := AWidth;
    FHeight := AHeight;
    UpdateAnchorRules;
    UpdateExplicitBounds;
    Invalidate;
    Perform(WM_WINDOWPOSCHANGED, 0, 0);
    RequestAlign;
    if not (csLoading in ComponentState) then Resize;
  end;
end;
Т.е. Resize при загрузке из dfm вызывается лишь однажды, а так будет вызываться 4 раза. И в VCL строчка
if not (csLoading in ComponentState) then
встречается очень часто.

Разве что попробовать Reader модифицировать, чтобы сам парсинг dfm происходил один раз
7 фев 20, 15:27    [22075658]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
L_argo
Member

Откуда:
Сообщений: 1117
Я отказался от идеи хранения кода DFM. Получается очень много неудобств.
У меня простое создание компонент по их свойствам, перечисленным в ХМЛ. Все программно. Ничего лишнего.
Кода понадобилось немного.
Да, есть недостатки, но преимуществ намного больше, ИМХО.
7 фев 20, 16:35    [22075682]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
jack_vosmerkin
Member

Откуда:
Сообщений: 22
страно что еще некто не кричал *нельзя так делать* и *ты что с урала?*
раньше вроде так было когда про подобные безумие спрашивали
7 фев 20, 18:45    [22075751]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 60872
_Vasilisk> Я тут подумал, что все идеи с копированием свойств
_Vasilisk> через RTTI, конвертацией dfm в pas быстрее не будут.

А ты профайлером посмотрел, что конкретно больше всего
тормозит при создании? И насколько тяжелая форма вообще?

Posted via ActualForum NNTP Server 1.5

7 фев 20, 18:49    [22075753]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 60872
jack_vosmerkin> страно что еще некто не кричал *нельзя так делать* и *ты что с урала?*

Уже пофыркали на первой странице. Да и автор в стартовом посте
указал, что наследие, что понимает и что будет переделывать.

Posted via ActualForum NNTP Server 1.5

7 фев 20, 18:55    [22075756]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11498
Гаджимурадов Рустам
А ты профайлером посмотрел, что конкретно больше всего тормозит при создании?
Нет. AQTime так и не запустился

Гаджимурадов Рустам
И насколько тяжелая форма вообще?
Не тяжелая. Штук 5 тулбаров, PageControl с тремя вкладками, два фрейма с чартом и тулбарами, стандартный TTreeView
7 фев 20, 19:00    [22075758]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 60872
Для 200шт это как раз тяжелая.

Посмотри, может какие-то вкладки можно создавать
не сразу, а по "активации", или чарт хотя бы.

Posted via ActualForum NNTP Server 1.5

7 фев 20, 19:33    [22075779]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11498
Гаджимурадов Рустам
А ты профайлером посмотрел, что конкретно больше всего тормозит при создании?
Вот, собственно данные профайлера.

Профилировались все методы классов TReader, TComponent, TControl, TWinControl, TCustomForm. Сортировка по общему времени

Исходник ReadStr
function TReader.ReadStr: string;
var
  L: Byte;
  B: TBytes;
begin
  Read(L, SizeOf(Byte));
  SetLength(B, L);
  Read(B, L);
  Result := TEncoding.UTF8.GetString(B);
end;


К сообщению приложен файл. Размер - 21Kb
7 фев 20, 20:59    [22075801]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
DimaBr
Member

Откуда:
Сообщений: 11496
Напоминаю, только топор
8 фев 20, 00:39    [22075869]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
alekcvp
Member

Откуда:
Сообщений: 1849
_Vasilisk_,

А современные делфи ещё позволяют бинарные .dfm использовать или нет уже?
Или оно на рантайм не влияет?
8 фев 20, 11:13    [22075927]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 60752
Блог
alekcvp,

судя по профилю, это как раз бинарный dfm.
8 фев 20, 11:52    [22075937]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3523
alekcvp,

позволяет. вижу иногда старые формы в бинарном виде, вполне работают. другое дело что врятли это сильно поможет в данном случае.
8 фев 20, 12:03    [22075942]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
alekcvp
Member

Откуда:
Сообщений: 1849
softwarer
alekcvp,
судя по профилю, это как раз бинарный dfm.

Если бинарный, почему тогда ReadStr() на первом месте?
8 фев 20, 13:11    [22075965]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 60752
Блог
alekcvp
Если бинарный, почему тогда ReadStr() на первом месте?

Потому что недостаточно судить по названию. Стоит ещё заглянуть, что внутри этого ReadStr написано, тем более что топикстартер любезно опубликовал код.
8 фев 20, 13:48    [22075980]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 60872
_Vasilisk_> Вот, собственно данные профайлера.

Там сортировка кривая, но вообще овердофига, конечно.
Надо проверять все варианты без десериализации, однозначно.

Posted via ActualForum NNTP Server 1.5

8 фев 20, 13:57    [22075984]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 60752
Блог
Гаджимурадов Рустам,

да, становится привлекательной идея сгенерировать соответствующий dfm код. Быстро делается и должно убрать основные траты.
8 фев 20, 14:11    [22075987]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
DimaBr
Member

Откуда:
Сообщений: 11496
автор
В проекте создается 200 инстансов одной формы

Штук 5 тулбаров, PageControl с тремя вкладками, два фрейма с чартом и тулбарами, стандартный TTreeView

Как же хочется хоть краешком глаза посмотреть на эти 200 форм.....
Может пора оживить этот топик ?
13 фев 20, 02:25    [22078925]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 60872
_Vasilisk_> Вот

Чем закончились изыскания?

Posted via ActualForum NNTP Server 1.5

21 фев 20, 15:24    [22084680]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11498
Гаджимурадов Рустам
Чем закончились изыскания?
Забил до глобального рефракторинга
21 фев 20, 15:54    [22084724]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
DimaBr
Member

Откуда:
Сообщений: 11496
Покажи интерфейс с формами, очень интересно
21 фев 20, 15:58    [22084729]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 60872
Да что там показывать, 200 одинаковых форм...
Наверняка форма-карточка, вопрос только для
чего - это какие-то мониторы активности или
текущие таски итп.

Posted via ActualForum NNTP Server 1.5

21 фев 20, 16:09    [22084740]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
vavan
Member

Откуда: Казань
Сообщений: 3474
Гаджимурадов Рустам, в трейдинговых терминалах например порой много стаканов у людей открыто бывает
21 фев 20, 17:24    [22084789]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 60872
Ну это и есть один из примеров мониторов активности.
С той лишь разницей, что в трейдинговых терминалах
может быть несколько "окон" на один "объект" - по 4,
например, тогда 4 по 50 (экаунтов, например) - как раз
200 форм и наберётся (но, наверное, это что-то другое).

Posted via ActualForum NNTP Server 1.5

21 фев 20, 18:21    [22084826]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое создание форм  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 5713
Гаджимурадов Рустам,

не, влёгкую окон по 7-10 на каждый стол, а их штук 7 бывает нужно. И то если только российский рынок брать
у профи скорее всего больше
21 фев 20, 19:45    [22084878]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2 3      [все]
Все форумы / Delphi Ответить