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

Как достичь меньшего размера исполняемого файла?

Совсем недавно я вернулся в Delphi после долгой паузы и написал довольно простое приложение-утилита, с которым мой клиент запросил поддержку более старой версии...

Я знаю, что в эти дни размер не имеет большого значения, но мне показалось странным, что однокомпонентное приложение при компиляции составило 1'084'416 b исполняемый файл. Единственный .pas блок, который я написал, составляет около 20,8 тыс. Больших, главным образом из-за богатства gui.

Предложение uses выглядит следующим образом:

uses
  Windows, Messages, SysUtils, Variants, Classes, Controls, Forms, strutils,
  Dialogs, ADODB, DB, DBGrids, ExtCtrls, DBCtrls, StdCtrls, Grids, Menus,
  Buttons;

Интересно, могу ли я уменьшить размер приложения до 300-400k или меньше?

4b9b3361

Ответ 1

  • Сделали ли вы отладочную или выпускную сборку? (Сделайте его выпуском для меньшего размера, убедитесь, что оптимизация включена, отладочная информация отключена)

  • Вы отключили RTII (delphi 2010 и выше), если это не нужно? (Меньшие размеры EXE.)

  • Количество единиц в вашей статье использования вашего основного устройства, не является хорошим способом угадать размер EXE. Подумайте об этом так: сам VCL - это один большой код, другой уровень базы данных и материал, который вы пишете, вероятно, очень небольшой процент от размера EXE.

  • Чтобы понять свой исполняемый размер, попробуйте JCL Project Analyzer или прочитайте файл MAP, который создается при включении опции "Карта". Это точно скажет вам, что находится внутри исполняемого файла.

Это было бы глупо по разным причинам, но вы могли бы получить меньший исполняемый файл, используя Delphi 7, например. В конце, когда я делаю приложение, и я хочу уменьшить его, я смотрю, сколько времени потребуется, и сколько усилий перестроить все (например, с альтернативой vcl), и я тогда говорю себе, забываю о он.

Ответ 2

Вы можете попробовать использовать KOL (Библиотека ключевых объектов - это набор объектов для разработки мощности (но small) 32-битные приложения Windows GUI с использованием Delphi, но без VCL). KOL позволяет создавать очень компактные графические приложения Windows32 (начиная с ~ 11K без сжатия - если используется стандартная замена системных единиц). Большая часть кода преобразуется во встроенный ассемблер.

alt text http://kolmck.net/KOLLogo5.gif

Другой вариант - использовать exe-компрессор, например UPX

alt text http://upx.sourceforge.net/images/upx12.png

Ответ 3

MapFileStats (DelphiTools.info) - это хороший (бесплатный) инструмент, который позволяет вам видеть сколько места занимает каждая единица в вашем исполняемом файле. Мой собственный инструмент DelphiUnitSizes является альтернативой, которая помимо размеров единиц также отображает размер каждой функции или класса.

Delphi 2010 сделал исполняемый файл по умолчанию на 30% больше, вероятно, из-за RTTI, включенного в модули RTL/VCL, поэтому вы можете использовать более старую версию Delphi для меньшего размера exe.

Как отмечали другие UPX - отличный инструмент, ложные срабатывания vivusscanners не являются что часто в моем опыте.

Размер Delphi-исполняемых файлов может быть значительно сокращен с использованием пользовательских системных блоков и UPX-сжатия. Я могу генерировать exe файлы размером менее 64 КБ с моим игровым генератором на основе Delphi ZGameEditor, даже с Delphi Berlin.

Ответ 4

Насколько велика ваша DFM? Он включен как ресурс в ваш EXE. В зависимости от сложности вашего графического интерфейса вы можете обнаружить, что создание GUI во время выполнения кода может уменьшить размер EXE.

Ответ 6

Да, но тогда вам нужно будет предоставить другие модули кода в качестве дополнительных файлов. Точно так же, как .net требовал сборку, и у вас время выполнения VB и т.д., Это только время выполнения Delphi, но оно встроено в exe.

Другой вариант - сжать исполняемый файл, есть инструменты для этого.

Ответ 7

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

  • Убедитесь, что вы используете только те единицы, которые вы используете.

Но что бы вы ни делали, я очень сомневаюсь, что вы доберетесь до 300 тысяч. Если память используется, даже приложение "hello world" в Delphi 2 будет больше этого.

Ответ 8

Есть ли у вас файлы ресурсов или изображения, связанные с проектом?

Я думаю, что ADODB также содержит довольно накладные расходы. Если ваше приложение действительно использует базу данных, то только 1 МБ не так уж плохо для размера файла? Не забывайте, что ваше приложение - это просто exe - нет необходимости в дополнительной dll и т.д.