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

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

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

Ответ 1

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

Ответ 2

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

Множество факторов увеличивает exe:

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

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

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

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

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

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

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

Ответ 3

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