Как увеличить скорость запуска приложения Delphi? - PullRequest
14 голосов
/ 12 июля 2009

Что вы делаете для увеличения скорости запуска (или для уменьшения времени запуска) вашего приложения Delphi?

Кроме специфики приложения, есть ли стандартная уловка, которая всегда работает?

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

Ответы [ 11 ]

27 голосов
/ 12 июля 2009

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

19 голосов
/ 12 июля 2009

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

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

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

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

17 голосов
/ 12 июля 2009

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

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

13 голосов
/ 12 июля 2009

Перед показом вашей формы происходят три вещи:

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

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

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

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

4 голосов
/ 12 июля 2009

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

2 голосов
/ 22 сентября 2009

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

2 голосов
/ 19 июля 2009

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

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

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

2 голосов
/ 19 июля 2009

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

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

2 голосов
/ 17 июля 2009
  • Первое, что нужно сделать, это очистить авто список созданных форм (ищите проект Опции). Создавайте формы на лету при необходимости, особенно если приложение использует соединение с базой данных (модуль данных) или формы, которые включают интенсивное использование органов управления.
  • Также рассмотрите возможность использования наследования форм уменьшить размер исполняемого файла (использование ресурсов сведено к минимуму)
  • Уменьшить количество форм и объединить похожие или связанные функции в одну форму
2 голосов
/ 13 июля 2009

Развертывание приложения может (и обычно происходит!) Таким образом, что разработчик, возможно, не учел. По моему опыту, это вызывает больше проблем с производительностью, чем хотелось бы.

Распространенным узким местом является доступ к файлу - файл конфигурации, ini-файл, который требуется для запуска приложения, может хорошо работать на компьютере разработчика, но ужасно работает в различных ситуациях развертывания. Точно так же ведение журнала приложений может снизить производительность - как по причинам доступа к файлам, так и по росту файла журнала.

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

Другая проблема, с которой я часто сталкиваюсь, влияет на производительность приложения - это метод, используемый для импорта и экспорта данных в файлы. Обычно в бизнес-приложениях Delphi я вижу функции экспорта, которые работают с DataSets - повторяются и записываются в файл. Рассмотрите метод, используемый для записи в файл, рассмотрите доступную память, учтите, что «папка», в которую производится запись / чтение, может быть локальной для машины или на удаленном сервере.

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

...