Как увеличить скорость запуска приложения Дельфи?

" \\s +" должен добиться цели

14
задан Bruce McGee 20 March 2010 в 02:13
поделиться

11 ответов

Постарайтесь сделать как можно меньше в событии OnCreate вашей основной формы. Скорее перенесите некоторую инициализацию в другой метод и сделайте это, как только форма будет показана пользователю. Индикатор того, что приложение занято курсором мыши, имеет большое значение.

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

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

Вдобавок к этому, не создает автоматически все ваши формы . Создавайте их динамически по мере необходимости.

19
ответ дан 1 December 2019 в 05:48
поделиться

Итак, как предложил Аргалатыр, я изменил свой комментарий на отдельный ответ:

В качестве расширения к ответу «Не создавать формы автоматически» (который сам по себе будет достаточно эффективным) Я предлагаю отложить открытие соединений с базами данных, Интернетом, COM-серверами и любым периферийным устройством до тех пор, пока оно вам не понадобится.

17
ответ дан 1 December 2019 в 05:48
поделиться

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

4
ответ дан 1 December 2019 в 05:48
поделиться

In the project options, don't auto-create all of your forms up front. Create and free them as needed.

27
ответ дан 1 December 2019 в 05:48
поделиться

Перед тем, как ваша форма будет показана, произойдут три вещи:

  1. Все блоки 'инициализации' во всех модулях выполняются в " первый увиденный "порядок.
  2. Все автоматически созданные формы создаются (загружаются из файлов DFM и вызывается их обработчик OnCreate)
  3. Отображается ваша основная форма (вызываются OnShow и OnActivate).

Как указывали другие out, вам следует автоматически создавать только небольшое количество форм (особенно если они являются сложными формами с большим количеством компонентов) и не следует помещать длительную обработку в события OnCreate этих форм. Если случайно, ваша основная форма очень сложна, вам следует изменить ее дизайн. Одна из возможностей - разделить основную форму на несколько кадров, которые загружаются по запросу.

Также возможно, что одному из блоков инициализации требуется некоторое время для выполнения. Чтобы проверить, установите точку останова в первой строке вашей программы (главный блок begin..end в файле .dpr) и запустите программу. Будет выполнен весь блок инициализации, а затем точка останова остановит выполнение.

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

поместите точку останова в первую строку вашей программы (основной блок begin..end в файле .dpr) и запустите программу. Будет выполнен весь блок инициализации, а затем точка останова остановит выполнение.

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

поместите точку останова в первую строку вашей программы (основной блок begin..end в файле .dpr) и запустите программу. Будет выполнен весь блок инициализации, а затем точка останова остановит выполнение.

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

13
ответ дан 1 December 2019 в 05:48
поделиться

Deployment of the application can (and usually does!) happen in ways the developer may not have considered. In my experience this generates more performance issues than anyone would want.

A common bottleneck is file access - a configuration file, ini file that is required to launch the application can perform well on a developer machine, but perform abysmally in different deployment situations. Similarly, application logging can impede performance - whether for file access reasons or log file growth.

What I see so often are rich-client applications deployed in a Citrix environment, or on a shared network drive, where the infrastructure team decides that user temporary files or personal files be stored in a location that the application finds issues with, and this leads to performance or stability issues.

Another issue I often see affecting application performance is the method used to import and export data to files. Commonly in Delphi business applications I see export functions that work off DataSets - iterating and writing to file. Consider the method used to write to file, consider memory available, consider that the 'folder' being written to/read from may be local to the machine, or it may be on a remote server.

A developer may argue that these are installation issues, outside the scope of their concern. I usually see many cycles of developer analysis on this sort of issue before it is identified as an 'infrastructure issue'.

2
ответ дан 1 December 2019 в 05:48
поделиться

Самый быстрый код - это код, который никогда не запускается. Совершенно очевидно, правда;)

2
ответ дан 1 December 2019 в 05:48
поделиться

Поместите долго выполняющиеся задачи (открытие соединений с базой данных, соединение с сервером приложений и т. Д.), Которые должны выполняться при запуске в потоке. Все функции, зависящие от этих задач, отключаются до тех пор, пока поток не будет завершен.

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

2
ответ дан 1 December 2019 в 05:48
поделиться
  • Первым делом нужно очистить авто. список созданных форм (ищите Project Параметры). Создавайте формы на лету при необходимости, особенно если приложение использует соединение с базой данных (datamodule) или формы, которые включают интенсивное использование элементов управления.
  • Рассмотрите возможность использования наследования форм также для уменьшения размера exe (использование ресурсов имитируется)
  • Уменьшить количество форм и объединить аналогичные или связанные функции в единую форму
2
ответ дан 1 December 2019 в 05:48
поделиться

Сожмите исполняемый файл и любые библиотеки DLL, используя что-то вроде ASPack или UPX . Время декомпрессии более чем компенсируется более быстрым временем загрузки.

UPX использовался в качестве примера того, как быстрее загружать FireFox.

Обратите внимание, что есть недостатки Сжатие exe.

2
ответ дан 1 December 2019 в 05:48
поделиться

Это только для среды IDE, но Крис Хесик опубликовал в блоге сообщение о повышении производительности запуска под отладчиком .

2
ответ дан 1 December 2019 в 05:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: