Когда приложение Delphi слишком велико для одного EXE-файла?

Если я скомпилирую все приложение Delphi в один exe-файл, этот файл вырастет до 5 МБ, 10 МБ, а может и больше. Когда это слишком большой? Какие проблемы с этим? Это коммерческое приложение, в настоящее время на Delphi XE.

Мне известно о возможности сборки с помощью пакетов времени выполнения. Это звучало как хорошая идея, но я вижу здесь комментарии, отмечающие, что есть некоторые проблемы и недостатки.

3 ответа

Решение

Я не знаю никаких проблем с exe-размером приложения. В настоящее время я работаю в приложении, где exe составляет около 60 МБ, и нет никаких проблем.
Единственное ограничение, которое я знаю, это ограничение доступной памяти. А приложение с использованием runtime-пакетов будет занимать больше рабочей памяти, потому что все исполняемые пакеты загружаются при запуске приложения. И пакеты содержат много кода, который, вероятно, не используется в вашем приложении.
Мне действительно нравится идея runtime-пакетов, но мне не нравится реализация в Delphi. Одним из основных недостатков является то, что вы должны поставлять свое приложение с кучей пакетов, которые трудно поддерживать.

Приложение Delphi никогда не бывает слишком большим.
Однако чем больше исполняемый файл, тем сложнее будет распространять файл.
Также, если исполняемый файл находится на сетевом диске, время запуска может пострадать.

Ряд факторов заставляет exe расти:

  • включение отладочной информации (более или менее удвоит размер исполняемого файла).

    Отключите включение отладочной информации в окончательный исполняемый файл (см. Скриншот выше).
  • включая растровые изображения (в imagelist или аналогичный компонент) также существенно увеличит exe.
  • Включая ресурсы (используя пользовательский *.res) файл будет увеличиваться в размере.

Я бы посоветовал не помещать ресурсы в отдельную DLL.
Это усложнит ваше приложение, не уменьшая время загрузки и проблемы с распространением.
Отключение отладочной информации в рабочем коде является обязательным.
Если у вас Delphi-2010 или новее, вы можете включить изображения в png формат.
Это займет намного меньше места, чем растровые изображения старой школы.

Пока ваше приложение меньше 30 МБ, я бы не стал сильно беспокоиться о размере файла.

Газа RTTI информация
Дэвид предлагает удалить информацию RTTI (это отключит привязки в реальном времени и некоторые другие дополнительные вещи), см.: Уменьшить исполняемый файл
По словам Дэвида, это экономит около 30% в размере exe.

Exe-size только увеличит время загрузки
Гораздо важнее объем данных, который ваше приложение выделяет в качестве хранилища.
Количество места, которое вы используете (или трата), будет иметь гораздо большее влияние на производительность вашего приложения, чем размер исходного файла.
Стратегия или инструменты для поиска проблем с использованием памяти без утечек в Delphi?

Лучший способ оптимизации - убедиться, что вы не пропускаете ресурсы
Как активировать ReportMemoryLeaksOnShutdown только в режиме отладки?
Windows API вызывает обнаружение утечки памяти

Используйте умные структуры данных и алгоритмы
Это становится слишком общим, чтобы действительно сузить его здесь, но используйте алгоритмы с O(медленно увеличивающийся) по сравнению с O(расточительное увеличение).
Big-O для восьмилетних?
И попытайтесь ограничить использование памяти, выбирая только те данные, которые вам нужны, вместо всех данных, которые вам могут понадобиться, но, вероятно, никогда не будут.
Структуры данных Delphi
И т. Д.

Используйте RELEASE Build для уменьшения размера выполнения, увеличения производительности. Также используйте пакет времени выполнения для уменьшения файла exe, но используйте пакет времени выполнения, чтобы увеличить размер файла пакета (установки).

Другие вопросы по тегам