Как добиться меньшего размера исполняемого файла?
Совсем недавно я вернулся в Delphi после долгой паузы и написал довольно простое служебное приложение, которое мой клиент попросил поддержать более старую версию...
Я знаю, что в наши дни размер не имеет большого значения, но мне показалось странным, что однокомпонентное приложение при компиляции составило 1'084'416 б исполняемого файла. Один и единственный блок.pas, который я написал, имеет размер около 20,8 тыс., В основном из-за богатства графического интерфейса.
uses
пункт выглядит следующим образом:
uses
Windows, Messages, SysUtils, Variants, Classes, Controls, Forms, strutils,
Dialogs, ADODB, DB, DBGrids, ExtCtrls, DBCtrls, StdCtrls, Grids, Menus,
Buttons;
Интересно, есть ли способ уменьшить размер приложения до 300-400 КБ или меньше?
8 ответов
Вы делали отладочную или релизную сборку? (Сделать релиз меньшего размера, убедиться, что оптимизация включена, отладочная информация отключена)
Вы отключили RTII (Delphi 2010 и выше), если не нужно? (Меньшие размеры EXE.)
Количество единиц в предложении использования вашего основного блока не является хорошим способом угадать размер EXE. Подумайте об этом следующим образом: сам VCL представляет собой один большой объем кода, а уровень базы данных - другой, и материал, который вы пишете, вероятно, составляет очень небольшой процент от размера EXE.
Чтобы понять размер исполняемого файла, попробуйте JCL Project Analyzer или прочитайте файл MAP, который создается при включении параметра "Карта". Это скажет вам точно, что находится внутри вашего исполняемого файла.
Это было бы глупо по разным причинам, но вы могли бы получить меньший исполняемый файл, например, с помощью Delphi 7. В конце концов, когда я делаю приложение и хочу уменьшить его, я смотрю на то, сколько времени это займет, и сколько усилий требуется для восстановления всего (например, с помощью альтернативы vcl), и затем я говорю себе, забудь о Это.
Вы можете попробовать использовать KOL (Key Objects Library - набор объектов для разработки мощных (но небольших) 32-битных приложений с графическим интерфейсом Windows, использующих Delphi, но без VCL). KOL позволяет создавать очень компактные приложения с графическим интерфейсом Windows32 (начиная с ~11K без сжатия - если предлагается замена системных блоков). Большая часть кода конвертируется во встроенный ассемблер.
Другой вариант - использовать exe-компрессор, такой как UPX.
MapFileStats (DelphiTools.info) - хороший (бесплатный) инструмент, который позволяет вам увидеть, сколько места занимает каждый модуль в вашем исполняемом файле. Мой собственный инструмент DelphiUnitSizes - это альтернатива, которая помимо размеров единиц также отображает размер каждой функции или класса.
Delphi 2010 сделал исполняемый файл по умолчанию примерно на 30% больше, вероятно, из-за RTTI, включенного в модули RTL/VCL, так что вы можете использовать более старую версию Delphi для меньшего размера exe-размера.
Поскольку другие упоминали, что UPX также является отличным инструментом, ложные срабатывания вирусов-вирусов в моем опыте встречаются не так часто.
Размер исполняемых Delphi-файлов можно очень сильно сократить с помощью пользовательских системных модулей и UPX-сжатия. Я могу создавать exe-файлы размером менее 64 КБ с моим игровым генератором ZGameEditor на основе Delphi, даже с Delphi Berlin.
Насколько большой ваш DFM? Он включен в качестве ресурса в ваш EXE. В зависимости от сложности вашего графического интерфейса вы можете обнаружить, что создание графического интерфейса во время выполнения в коде может уменьшить размер EXE-файла.
Вы также можете добавить следующую строку в начало файла проекта:
{$SetPEFlags 1}
Объяснение здесь: http://hallvards.blogspot.fr/2006/09/hack12-create-smaller-exe-files.html
Да, но тогда вам нужно будет предоставить другие единицы кода в качестве дополнительных файлов. Так же, как для.net требовалась сборка, и у вас есть среды выполнения VB и т. Д., Это всего лишь среда выполнения Delphi - но она встроена в исполняемый файл.
Другой вариант - сжать исполняемый файл, для этого есть инструменты.
Вы говорите, что возвращаетесь в Дельфы. Если у вас все еще есть старая версия, используйте ее - каждая новая версия добавляет дополнительные функции, и если они вам не нужны, ваши файлы будут меньше, без них.
Убедитесь, что вы используете только те единицы измерения, которые действительно используете.
Но что бы вы ни делали, я очень сильно сомневаюсь, что вы получите 300к. Если память не изменяет, даже приложение "Hello World" в Delphi 2 будет больше, чем это.
У вас есть какие-либо файлы ресурсов или рисунки, которые связаны с проектом?
Я думаю, что ADODB также включает в себя довольно много накладных расходов. Если ваше приложение действительно использует базу данных, то не больше ли 1 МБ для размера файла? Не забывайте, что ваше приложение - это просто exe - не нужно никаких дополнительных DLL и т. Д.