Перейти к содержанию
Fire Monkey от А до Я
  • 0

Долгая загрузка формы


VladimirS

Вопрос

Подскажите, насколько сильно зависит время создания формы от количества контролов на ней?

Для меня это очень важно, потому что я для создания "резинового макета" и центровки позиций контролов использую много TLayout-ов с выравниванием.

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

очень сыровато все этого не отнять, я думаю раз своих мощностей не хватает довести до ума компоненты хотя бы, можно как то сообщество стимулировать, давать хотя бы бесплатно лицензию энтузиастам , которые могут чет допиливать и предложения какие то рабочие выдвигать...  Тормоза от избыточности кода , не оптимизировано наверное создание , тащит за собой кучу java классов на всякий случай. 

Ссылка на комментарий
  • 0

Может кто подскажет.

Запускаю приложение на iPhone, открываю всякие там формы, делаю выборки из БД, показываю и скрываю объекты. 

Если это делается первый раз, то это как-то медленно все выполняется, Если такая операция выполнялась ранее, то она выполняется быстро.

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

Изменено пользователем masmat
Ссылка на комментарий
  • 0

Может кто подскажет.

Запускаю приложение на iPhone, открываю всякие там формы, делаю выборки из БД, показываю и скрываю объекты. 

Если это делается первый раз, то это как-то медленно все выполняется, Если такая операция выполнялась ранее, то она выполняется быстро.

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

Это происходит по той же причине, по какой, например, MS Word первый раз грузится относительно долго, а после его закрытия и повторного открытия загрузка происходит значительно быстрее.

Ссылка на комментарий
  • 0

 

Может кто подскажет.

Запускаю приложение на iPhone, открываю всякие там формы, делаю выборки из БД, показываю и скрываю объекты. 

Если это делается первый раз, то это как-то медленно все выполняется, Если такая операция выполнялась ранее, то она выполняется быстро.

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

Это происходит по той же причине, по какой, например, MS Word первый раз грузится относительно долго, а после его закрытия и повторного открытия загрузка происходит значительно быстрее.

 

 

Все это понятно, но блин как-то это все раздражает

Ссылка на комментарий
  • 0

Ситуация:

 

Есть Form1, на ней есть ListView, в который загружается список значений одного из полей БД SQLLite.

По нажатию на Item, производится выборка SQL запросом из БД. Результат выборки 1 строка.

Далее свойство Text (или Cells у StringGrid) компонентов (Label - 6 шт., Button - 4 шт., StringGrid - 7х3, Memo - 1 шт.) на Form2 заполняются значениями из полей БД, выбранной записи.

После этого вызывается Form2.Show;

 

Поведение:

Если открывать разные Item-ы, то в первые 3-4 раза открытия формы Form2 производится задержка до 4 секунд. Потом всё открывается быстро.

 

Дополнительно:

Закрытие формы Form2 процедурами Close или скрытие Hide, не влияет на скорость.

Форма Create создается на этапе запуска приложения.

 

Вопрос: Что за поведение такое? 

Есть ощущение, что iOS убивает форму Form2 и создает её заново, но после того как форма была открыта несколько раз, он перестает это делать.

Я понимаю, если бы я первый раз открывал форму и при этом создавая её, но она то уже создана.

Я даже отключал весь процесс заполнения данными, просто открываю форму, с незаполненными компонентами. Все равно такое же поведение.

 

P.S. на Андроиде такое не наблюдается.

Изменено пользователем masmat
Ссылка на комментарий
  • 0

А не думали что это задержка при обращении к БД? Особенно на это указывает что задержка исчезает не сразу - возможно срабатывает кэширование записей БД.

 

Я выношу всю работу с БД в отдельный поток и индикацией загрузки на форме. Форму если она часто вызывается лучше один раз создать, потом просто скрывать и отображать. B еще чисто по ощущениям - фрейм создается быстрее. Сейчас стараюсь вместо форм использовать фреймы с динамическим созданием.

 

И еще не забывайте про отрисовку стилей - http://fire-monkey.ru/topic/1495-tmultiview-kak-izbezhat-zaderzhki-pri-pervom-poiavlenii-tmultivie/?hl=preloadcontent#entry7293

 

.

Ссылка на комментарий
  • 0

А не думали что это задержка при обращении к БД? Особенно на это указывает что задержка исчезает не сразу - возможно срабатывает кэширование записей БД.

 

Я выношу всю работу с БД в отдельный поток и индикацией загрузки на форме. Форму если она часто вызывается лучше один раз создать, потом просто скрывать и отображать. B еще чисто по ощущениям - фрейм создается быстрее. Сейчас стараюсь вместо форм использовать фреймы с динамическим созданием.

 

И еще не забывайте про отрисовку стилей - http://fire-monkey.ru/topic/1495-tmultiview-kak-izbezhat-zaderzhki-pri-pervom-poiavlenii-tmultivie/?hl=preloadcontent#entry7293

 

.

 

1. Думал про БД. Даже делал специально выборку всех данных в одном запросе, что бы положить в память. Но не помогает. Если Вы заметили, я писал, что отключал получение данных, все равно форма открывается первые 3-4 раза долго.

 

2. Выносите БД в отдельный поток - буду признателен, если поделитесь как это сделать. Может поможет.

 

3. "Форму если она часто вызывается лучше один раз создать, потом просто скрывать и отображать." - я так же писал, что она создается один раз и потом не закрывается, а скрывается через Hide, т.е. она не уничтожается

 

P.S. За ссылку спасибо

Изменено пользователем masmat
Ссылка на комментарий
  • 0

Попробуйте использовать этот модуль. При помощи него можете выполнять действие в отдельном потоке.

Использование:
 

procedure StartAsyncThread;
begin
  Run(TAsyncTask,
    procedure(ATask: IAsyncTask)
    begin
        //что делать
    end,
    procedure(ATask: IAsyncTask)
    begin
    //Что делать после завершения
    end);
end;

AsyncTask.zip

Ссылка на комментарий
  • 0

 

Попробуйте использовать этот модуль. При помощи него можете выполнять действие в отдельном потоке.

Использование:

 

procedure StartAsyncThread;
begin
  Run(TAsyncTask,
    procedure(ATask: IAsyncTask)
    begin
        //что делать
    end,
    procedure(ATask: IAsyncTask)
    begin
    //Что делать после завершения
    end);
end;

 

Спасибо. Сейчас буду пробовать. По результатам обязательно отпишусь

Ссылка на комментарий
  • 0

Вообщем странные всё эти тормоза.

Новый проект, 2 формы, создаются автоматически.

На каждой форме по несколько контролов (панель, лабель)

 

Запуск 15 секунд до открытия первой формы.

 

Другие же приложения могут быстро запускаться, почему из под Delphi они так медленно запускаются?

Есть у кого-нибудь мысли? 

Ссылка на комментарий
  • 0
  • Модераторы

вот такой способ например

 

создаём сплеш-форму пустую, на OnActivate формы выполняем Application.CreateForm(наши формы....)

убираем все формы с автокреата, кроме сплеш-форм

Изменено пользователем ZuBy
Ссылка на комментарий
  • 0

вот такой способ например

 

создаём сплеш-форму пустую, на OnActivate формы выполняем Application.CreateForm(наши формы....)

убираем все формы с автокреата, кроме сплеш-форм

 

Время запуска не изменилось. Заставка запуска так и висит 15-16 секунд, потом все быстро запускается, что я даже не успеваю увидеть сплэш-форму.

Вот как уменьшить момент показа черного экрана? Я ставил туда типовую картинку от Delphi, потом поставил туда свою картинку, на которой написано типа "Идет загрузка, подождите пожалуйста", но блин ждать 15 секунд на запуск приложения это много.

 

Потом скорость работы приложения меня устраивает, но вот сам запуск очень смущает

Изменено пользователем masmat
Ссылка на комментарий
  • 0

Вообщем добился я результата в 4 секунды запуска, т.е. показа черного экрана заставки.

 

Для достижения этого нужно было всего лишь оставить на форме один Button.  :D  :D  :D

 

Сокращение времени загрузки происходило при удалении компонентов Label. 

Получилось 1 Label = 1 секунда.

Ссылка на комментарий
  • 0

Вообщем добился я результата в 4 секунды запуска, т.е. показа черного экрана заставки.

 

Для достижения этого нужно было всего лишь оставить на форме один Button.  :D  :D  :D

 

Сокращение времени загрузки происходило при удалении компонентов Label. 

Получилось 1 Label = 1 секунда.

Это что то новое))))

Ссылка на комментарий
  • 0

 

Вообщем добился я результата в 4 секунды запуска, т.е. показа черного экрана заставки.

 

Для достижения этого нужно было всего лишь оставить на форме один Button.  :D  :D  :D

 

Сокращение времени загрузки происходило при удалении компонентов Label. 

Получилось 1 Label = 1 секунда.

Это что то новое))))

 

 

Вот и я теперь не знаю куда копать.

На Андроиде всё приложение запускается за 6-8 секунд, в зависимости от аппарата.

А на iOs это же приложение за 30 секунд.

 

Пришлось начать писать проект под iOS с "нуля" и наткнулся сразу на эту проблему. И это только несколько компонентов и 2 формы. А дальше еще БД есть и т.д. с этим связанное.

Ссылка на комментарий
  • 0

А есть у кого-нибудь присутствующих опыт разработки на XCode?

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

Определенно нет, сами подумайте

XCode - официальный инструмент для разработки от Apple. По аналогии с Google и их Android Studio - там и компилируется, и запускается, и в общем плане быстродействия всё НАМНОГО быстрее. Просто потому, что родное

Ссылка на комментарий
  • 0

точно больше никаких обработок не делаешь в OnCreate OnShow? точно не открываешь в DataModule никакой базы данных запросом не индекисруемым? Вот одна форма 5 лейблов и одна кнопка и больше ничего и никаких обработок грузится все это 5 секунд? 

 

у меня был такой косяк когда на форме было намного больше компонентов, около 30, тогда загрузка шла 5 секунд на ХЕ7. пришлось из все раскидать по другим формам. 

Ссылка на комментарий
  • 0

точно больше никаких обработок не делаешь в OnCreate OnShow? точно не открываешь в DataModule никакой базы данных запросом не индекисруемым? Вот одна форма 5 лейблов и одна кнопка и больше ничего и никаких обработок грузится все это 5 секунд? 

 

у меня был такой косяк когда на форме было намного больше компонентов, около 30, тогда загрузка шла 5 секунд на ХЕ7. пришлось из все раскидать по другим формам. 

 

Это новый проект, там точно ничего не было в Create и Show.

У меня появилась одна догадка в чем может быть дело, но пока не могу утверждать это.

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

Такое наблюдалось у меня при удалении компонент: TabControl, ImageList, Image, Grid-ы

После того, как я удалил все строки во всем проекте касающиеся созданию этих удаленных контролов, так сразу скорость работы увеличилась.

 

Эксперименты продолжаются

Ссылка на комментарий
  • 0
  • Модераторы

Из моего опыта: На скорость также влияет количество подключаемых юнитов, т.е. иногда бывает так, что вы кинули компонент на форму (среда автоматом подключает необходимые юниты), а потом передумали и удалили его, но среда не почистила список юнитов. Я лично наблюдал такую ситуацию, приложение тоже долго грузилось, когда вручную почистил список юнитов, всё встало на свои места.

Ссылка на комментарий
  • 0

Из моего опыта: На скорость также влияет количество подключаемых юнитов, т.е. иногда бывает так, что вы кинули компонент на форму (среда автоматом подключает необходимые юниты), а потом передумали и удалили его, но среда не почистила список юнитов. Я лично наблюдал такую ситуацию, приложение тоже долго грузилось, когда вручную почистил список юнитов, всё встало на свои места.

 

Да да, с этим вообще беда

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...