Подтвердить что ты не робот

Уменьшить exe файл

Использование Delphi (или вообще любых инструментов, если они существуют, конечно), возможно ли уменьшить размер файла exe, удалив весь код, который не используется, но который присутствует там?
(например, функция или процедура, которая присутствует, но никогда не вызывается).
Я помню, что с помощью Pascal, используя единицу (без объектов), компилятор включает в себя только процедуры и функции, которые действительно используются, и вычеркивает неиспользуемые подпрограммы в блоке из окончательного exe.

С Object-pascal я помню, что в Delphi 1 все члены объекта включены в exe,
Что-то изменилось с тех пор, пока Delphi-XE2?

4b9b3361

Ответ 1

Если вы не используете RTTI, вы можете добавить это в начало своего .dpr файла (сразу после program), чтобы удалить дополнительную информацию RTTI:

{$IFOPT D-}{$WEAKLINKRTTI ON}{$ENDIF}
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}

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

Вы также можете добавить следующее, снова где-то в вашем .dpr файле:

{$SetPEFlags IMAGE_FILE_RELOCS_STRIPPED}

Это приведет к удалению информации о перемещении, которая не нужна в .exe. Не добавляйте это в DLL или пакет!

Ответ 2

уменьшить размер EXE приложения - отличная статья

(Взято по ссылке выше)

Как правило, EXE файлы, созданные с помощью Delphi, больше, чем файлы EXE созданный с использованием другого языка программирования. Причина в том, что VCL. (Конечно, VCL имеет много преимуществ...)

Существует несколько способов уменьшить размер EXE:

01) Используйте EXE-Packer (UPX, ASPack,...) - UPX

02) Используйте KOL.

03) Запишите приложение без VCL

04) Используйте ACL (Библиотека управления API)

05) Используйте StripReloc.

06) Деактивировать информацию удаленной отладки и TD32.

07) Возможно, вы захотите поместить код в dll.

08) Не помещайте одни и те же изображения несколько раз в форму. Загрузите их во время выполнения.

09) Используйте сжатые изображения (JPG, а не BMP)

10) Храните меньше свойств в файлах DFM

Ответ 3

Если ваша цель - уменьшить размер исполняемого файла, вы можете использовать инструмент, который сжимает его и позволяет выполнять его, поскольку он не сжимает.. (= не zip)

Например, вы можете проверить UPX, который отлично работает с программами delphi.

Ответ 4

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

Ответ 5

Просто чтобы дополнить то, что написали другие...

Интеллектуальный компоновщик устранит неиспользуемые подпрограммы кроме при следующих условиях:

  • У блока есть раздел initialization - к сожалению, многие из самых больших блоков в RTL/VCL (классы, SysUtils, Windows, Forms..., чтобы назвать несколько) имеют разделы инициализации, поэтому, если они находятся в ваш пункт uses вы получите всю энчиладу, связанную с вашим кодом. Большая часть кода в RTL/VCL может быть реорганизована для уменьшения или устранения этого, но это приведет к потере обратной совместимости.

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

Дополнительные меры, которые могут потребоваться для уменьшения размера файла exe:

  • Воспользуйтесь преимуществом наследования формы. Если у вас много похожих форм, создайте базовую форму для их наследования. Эти дочерние формы будут хранить только свойства, которые отличаются от базовой формы в их dfms. Это может значительно уменьшить размер исполняемого файла, исключив избыточную информацию в ваших dfms.

  • Храните любую большую графику во внешних файлах и загружайте их по требованию. Заставки, "скины", наборы значков и т.д. могут действительно раздувать размер exe. Delphi не всегда сохраняет эти файлы в наиболее эффективном формате, когда они встроены в exe.

  • Вы можете сбрить 10% - 30% от размера exe, удалив некоторые неиспользуемые данные из exe после его компиляции. Существуют сторонние инструменты, которые могут это сделать, но вы можете устранить некоторые из трещин, установив соответствующий заголовок PE flags. Убедитесь, что вы понимаете последствия каждого флага перед его использованием, поскольку некоторые флаги могут сделать ваш exe непригодным.

  • Скопируйте части RTL/VLC в свои собственные устройства - вместо включения классов или SysUtils в свой раздел uses, создайте новый блок и скопируйте только классы и функции, которые вам нужны в устройстве. Затем используйте его.

  • Разбить код на загружаемые модули. Если у вас есть несколько exes, которые повторно используют одни и те же единицы, вы можете уменьшить их, используя dll или bpls, а не статически связывать все с exes. Dll/bpl будет загружаться только в память, независимо от того, сколько им понадобится.