Как уменьшить размер приложения в delphi
В данном совете ПО мы откроем страшную тайну. В среде программирования Delphi 2006 и выше, релоки можно не удалять, а просто не создавать! Так в Delphi 2006 появилась недокументированная директива компилятора . Она позволяет настроить несколько тонких моментов создания нашего бинарника. В первую очередь она интересна тем, что позволяет отключить создание таблицы релокаций. Обратите свое внимание! Не отключайте таблицы релокаций в dll, bpl и др. файлах. Таблица релокации не нужна exe файлу, т.к. он всегда грузится по одному и тому же адресу.
Использование директивы очень простое:
Откройте файл проекта (dpr)
В uses добавьте Windows
Ниже пропишите
Попробуйте скомпилировать файл в Delphi до добавления этой директивы и после.
Вы сами сможете убедиться, что размер exe уменьшился. В дополнение хотим сказать, что использование SETPEFLAGS этим не ограничивается. У неё есть ещё масса интересных возможностей. Получить их полный список очень просто: Просто откройте модуль Windows
Найдите в нём поиском IMAGE_FILE_RELOCS_STRIPPED
Нашли? Ниже идёт целый список констант, начинающихся с IMAGE_FILE_
Справа идёт комментарий. Для включения нескольких инструкций, используйте or. Вот небольшой пример:
IMAGE_FILE_LINE_NUMS_STRIPPED or IMAGE_FILE_LOCAL_SYMS_STRIPPED or
IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP or IMAGE_FILE_NET_RUN_FROM_SWAP>
Что я здесь сделал?
IMAGE_FILE_RELOCS_STRIPPED - отрезали релоки
IMAGE_FILE_DEBUG_STRIPPED - убрали из ехе Debug информацию
IMAGE_FILE_LINE_NUMS_STRIPPED - убрали из exe информацию о номерах строк
IMAGE_FILE_LOCAL_SYMS_STRIPPED - убрали local symbols
IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP - При запуске exe с компакт-диска, флэш накопителя, других извлекаемых из персонального компьютера устройств, считать exe в свап и запустить оттуда. Полезно, если нужно запустить программу с компакта, а потом попросить вставить другой.
IMAGE_FILE_NET_RUN_FROM_SWAP - аналогично предыдущей, только для сетевых дисков. 618">
Многие, конечно, знают, что без проблем уменьшить размер exe файла можно, вообще не используя никакие упаковщики и совсем функциональность не изменяя, путём удаления из таблицы exe самих только релокаций .. .
Обычно , с этой целью используют сторонние утилиты. Как вариант - StripReloc , авторства Джордона Рассела.
А теперь давайте раскроем небольшой секрет! В Дельфи 2006 и далее , релоки не удалять можно, а просто совсем не создавать!
В Дельфи 2006 недокументированная появилась директива комп и лятора под названием . Она дает возможность довольно легко настроить парочку тонких нюансов процесса творения нашего бинарника.
В о-первых, она именно тем и интересна, что нам позволяет создание таблицы релокаций полностью отключить.
Но в нимание! От таблицы ни в коем случае н е отключайте релокаций в dll, bpl и иных файлах.
Сама же т аблица релокации exe файлу и вовсе не нужна, потому что он грузится всегда по идентичному адресу.
А и спользование самой директивы достаточно простое:
Сначала о ткройте файл вашего проекта (dpr)
Далее добавьте в uses Windows
Продолжая, пропишите ниже
Далее скомпилировать п опробуйте файл именно до добавления данной директивы , а также и после.
После чего Вы убедит е с ь , что размер самой exe сразу уменьшился.
Как дополнение необходимо сказать, что само использование SETPEFLAGS этим всем вовсе не ограничивается.
Представляется ещё масса различных возможностей.
Чтобы п олучить полный список их сделайте следующие действия :
Сначала о ткройте модуль Windows
Далее ищите в нём с помощью поиск а IMAGE_FILE_RELOCS_STRIPPED
Далее уже идёт немалый список констант, которые начинаю т ся с IMAGE_FILE_
Справа находится сам комментарий. Для того, чтобы включ ить нескольк о инструкций, надо использ овать or.
Вот неплохой пример:
IMAGE_FILE_LINE_NUMS_STRIPPED or IMAGE_FILE_LOCAL_SYMS_STRIPPED or
IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP or IMAGE_FILE_NET_RUN_FROM_SWAP>
Что мы сделал и здесь?
IMAGE_FILE_RELOCS_STRIPPED – здесь отрезал и релоки
IMAGE_FILE_DEBUG_STRIPPED – тут в ыбросил из ехе Debug саму информацию
IMAGE_FILE_LINE_NUMS_STRIPPED – здесь в ыбросил и из exe саму информацию о номерах строк
IMAGE_FILE_LOCAL_SYMS_STRIPPED – тут в ыбросил и local symbols
IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP – Когда запуск аете exe с компакта, флэшки, либо же других устройств, нужно считать exe в свап и именно оттуда запустить. Подойдет , когда необходимо с компакта запустить программу, а потом вставить другой попросить.
IMAGE_FILE_NET_RUN_FROM_SWAP - идентично предыдущей, но предназначено исключительно для сетевых дисков .
Я выпускаю один исполняемый файл (.EXE) для настольной программы, использующей Delphi 2009. У меня нет внешних DLL или ресурсов, которые мне нужны для запуска программы.
Я использую два компонента: LMD Innovative ELPack и Сергей Ткаченко TRichView, которые скомпилированы в мой исполняемый файл.
Когда я создаю свою производственную версию, используя конфигурацию сборки "Release", исполняемый файл составляет 13 533 КБ.
До использования Delphi 2009 я использовал Delphi 4. Исполняемый файл был только 2,671 Кбайт, включая те же самые два компонента и в основном с тем же кодом, что и моя текущая версия.
Я действительно понимаю, что Delphi 2009 полностью Unicode (что является основной причиной, почему я обновил), а Unicode может привести к удвоению размера. Но это примерно в 5 раз больше.
Есть ли причина, по которой мой исполняемый файл должен оставаться в 5 раз больше? Или есть несколько простых способов сократить значительную часть исполняемого файла?
Обратите внимание. Некоторые люди отвечают с помощью способов сжатия Delphi EXE. Это не то, что я пытаюсь сделать. Я пытаюсь просто понять, почему так много места используется, чтобы удалить то, что может не понадобиться. Если это будет сделано, сжатие может быть выполнено после этого, если это необходимо.
На самом деле не имеет значения, насколько большой или маленький исполняемый файл после его установки. Он предназначен для загрузки и минимизации загрузки и загрузки сервера, которые вы хотите сжать. Я предпочитаю использовать Inno Setup и сжимать программу внутри самой программы установки. Затем, когда он установлен, он расширяется до полного размера. Это предотвращает возможное обнаружение вируса и устраняет дополнительное время запуска, необходимое для распаковки программы в памяти. Кроме того, я кодирую как мою исполняемую, так и мою программу установки, и некоторые методы сжатия несовместимы с этим.
Подробнее о сжатии см. в вопросе StackOverflow: Delphi EXE-компрессор?
ldsandon попросил меня предоставить именно то, что я использую, поэтому вот они:
ОТВЕТЫ
Ответ 1
При переходе с Delphi 7 на Delphi 2010. наш .exe вырос, например, с 16 до 35 мегабайт.
Несколько недель назад я задал вопрос, похожий на ваш вопрос на форуме Embarcadero. (ссылка) В моем OP я перечислил серию ссылок на эту тему, которые могут оказаться полезными.
Мы попытались использовать UPX для сжатия нашего .exe. Если позволить ему работать часами, это значительно сократит наш .exe, но мы, вероятно, не будем использовать его в производстве по следующим причинам:
У нас есть довольно много .exe и не хочу ждать 1/2-day для каждой сборки. (Возможно, мы могли бы найти набор параметров негрубой силы для UPX, который уменьшил бы это. )
Хотя размер .exe сокращен, нашего shippable не было, потому что наш установщик (не удивительно) не смог выжать гораздо больше сжатия из уже сжатого файла. тогда как он смог уменьшить оригинальные 16 meg.exe до 8 мегабайт.
Я прочитал несколько отчетов, которые в какой-то момент (редко, но не всегда) UPX exe запускал различные антивирусные программы, чтобы сообщить, что приложение содержит вирус. (Я не помню дату, сайт или детали того, где я это видел, поэтому мне немного несправедливо сообщить об этом здесь.) Но мы так рискуем рисковать, что даже такая возможность случается, что UPX находится вне таблицы.
Ссылка на форуме Embarcadero также включает ссылку в другой поток SO по этой теме.
Я продолжаю удивляться и разочаровываться в том, что мы переместились на Delphi 2010. Когда Ник замечает, 2X для Unicode довольно чрезмерен.
Тем не менее, раздувание является относительно небольшим компромиссом при переходе на D2010, потому что IMO, D2010 является таким потрясающим обновлением многими другими способами. Но это означает, что нам, вероятно, придется переместиться на 2 компакт-диска, а не на один. Я не ожидаю реакции на это от нашей организации.
Ответ 2
Не видя фактических настроек, которые использует ваша конфигурация сборки "Release", объясняя это увеличение размера, требуется много предположений.
Помимо некоторых, возможно, маловероятных факторов, приводящих к значительному увеличению количества кода, "затягиваемого", даже если он не используется, эта величина увеличения будет легче всего объяснить включением отладочной информации.
Я бы посмотрел ваши настройки компилятора и компоновщика для:
- Отладочная информация (настройка компилятора)
- TD32 info (linker)
- Удаленная информация об отладке (компоновщик)
Сравните эти настройки в проекте Delphi 2009 с эквивалентами в Delphi 4.
Ответ 3
Измените ожидаемое увеличение на 2X от Unicode, и в итоге вы получите неудовлетворенный прирост в 2,5 раза. Это имеет смысл, учитывая, сколько версий вы пропустили. Много много было добавлено в VCL и RTL с Delphi 4, и не все это - материал, который можно легко скомпоновать, даже если вы никогда его не используете. В зависимости от того, сколько единиц вы используете, вы могли бы перевозить довольно много лишнего багажа.
Allen Bauer и команда компилятора добавили новую функцию в D2010, чтобы помочь уменьшить это, но, по-видимому, они осторожно ступают и не делают используйте его как можно больше мест. Надеюсь, в 2011 году и последующих релизах мы увидим более резкое сокращение.
Ответ 4
Я добавлю несколько слов. Linker может удалить неиспользуемые процедуры и функции только в том случае, если он может следовать иерархии кода. Список кошмаров для компоновщика, перечисленных ниже:
Доступ к кодам и структурам данных осуществляется с начала, инициализации, секций финализации единиц. Здесь у вас есть контроль, удаление ненужных вызовов или создание объектов. Даже если вы создадите объекты по требованию и только освободите их в разделе финализации, аккуратно сделайте
Ответ 5
Если вы перейдете к инструментам/настройкам и настроите их таким образом, вы можете с легкостью сжать исполняемый файл, с которого вы работаете, через элемент меню в среде IDE.
Ответ 6
Еще один способ - посмотреть, "какой блок увеличивает размер?".
Для этого я использую JCL 'Project Analyzer IDE', интегрированный в IDE с установкой JCL/JVCL, он показывает вам все единицы с их соответствующим размером. Вы можете экспортировать его в текстовый файл. Если вы сделаете это с 2 средами (D4 и D2009), у вас будет много информации.
Ответ 7
Я провел несколько тестов, чтобы увидеть разницу между D2007 и D2010, потому что мы обновляемся до D2010. Я тестировал приложение GUI среднего размера с примерно 60 формами (сетки с формами деталей, фреймами и т.д.). Мы используем компоненты TMS + Remobjects.
D2007:
" нормальная "компиляция: 18.8mb
с debug dcu: 18.8mb (одинаковый размер!)
D2010
нормальный: 23.9
debug dcu: 48.8mb (!)
Таким образом, использование debug dcu удваивает наш размер exe.
Тест с нашим бизнес-сервисом (без больших dfm):
D2007: 12.3mb
D2010: 17.1mb
Итак, да, D2010 увеличивает exe (немного), но это не проблема для моего клиента.
Изменить: некоторая информация о скомпилированном размере:
D2007:
D2010:
Итак, увеличение размера кода, но более чем удвоение данных!
Ответ 8
Если вы не хотите использовать exe-компрессор, вы должны дать StripReloc попробовать.
Ответ 9
1) Вы создаете подробный файл карты, и поскольку вы установили "используемый debug dcus", он также будет содержать символы для единиц RTL/VCL. Если он используется системами обработки исключений для создания стеков вызовов и т.п., Он может быть добавлен в исполняемый файл. И если это не сжато, это может сделать ваш размер .exe довольно большим.
2) Использование debug dcus также сделает ваш .exe несколько более крупным, потому что обычно они скомпилированы без настройки оптимизации и отладки, и они также замедляют ваш код. Они не должны использоваться в выпускной версии.
3) Отладочная информация должна добавлять информацию debig только к устройству, а не к исполняемому файлу, хотя требуется, чтобы IIRC создавал файл карты.
Ответ 10
Проверьте формат ваших dfm-s. Они должны быть в двоичном формате, если вы хотите сделать свой exe меньше.
Ответ 11
Стандартные единицы в вашем более позднем delphi могут содержать больше строк и констант, таких как строки ошибок, которые включены, даже если вы отключите отладочную информацию. Проверьте свои возможности.
У вас нет большого количества вопросов, кроме того, что вы не используете конкретный блок или удаляете из него ненужные данные.
(Мои опыты с Delphi 5)
Ответ 12
Так как D2010 добавляет расширенный RTTI, а RTTI является печально известным фактором увеличения размера exe, было бы интересно посмотреть, как большие D2009 файлы для этого приложения.
Если двоичные файлы D2009 значительно меньше, это не Unicode и т.д. Для моих собственных двоичных файлов у меня есть только увеличение на 30% или около того от D7 до D2009.
Ответ 13
Ранее было сказано, что использование исполняемого компрессора уменьшает размер исполняемого файла, но не установочного пакета. Однако, если вам нужен хороший компрессор, попробуйте ASPack.
@Tom1952: ASPack работает довольно быстро, всего несколько секунд, чтобы сжать файл
Ответ 14
Также вы можете изменить значок. Значок в новейшей среде IDE Delphi (т.е. XE3) совместим с Vista/7 и содержит все размеры (до 256x256, насколько я знаю). Таким образом, вы можете уменьшить размер файла exe с помощью изменения значка.
Я выпускаю один исполняемый файл (.EXE) для настольной программы с использованием Delphi 2009. У меня нет внешних DLL или ресурсов, которые мне нужны для работы программы.
Я использую два компонента: Элпак ЛМД новаторский и Сергей Ткаченко TRichView которые скомпилированы в мой исполняемый файл.
когда я создаю свою производственную версию, используя конфигурацию сборки "Release", исполняемый файл составляет 13,533 КБ.
перед использованием Delphi 2009, я использовал Delphi 4. Исполняемый файл, который он произвел, был только 2,671 КБ, включая те же два компонента и в основном имея тот же код, что и моя текущая версия.
Я понимаю, что Delphi 2009 полностью Unicode (что является основной причиной, по которой я обновил), и Unicode может вызвать удвоение размера. Но это примерно в 5 раз больше.
есть ли причина, почему мой исполняемый файл должен оставаться в 5 раз больше? Или есть несколько простых способов чтобы сократить значительный кусок исполняемого размера?
Пожалуйста, обратите внимание. Некоторые люди отвечают способами сжатия Delphi EXE. Это не то, что я пытаюсь сделать. Я пытаюсь просто понять, почему так много места используется для удаления того, что может быть не нужно. Если это сделано, сжатие все еще может быть сделано после этого, если это необходимо.
на самом деле не имеет значения, насколько велик или мал исполняемый файл после его установки. Это для загрузки и минимизировать нагрузку на сервер и время загрузки, которое вы хотите сжать. Я предпочитаю использовать Инно Установки и сжать программу внутри самой процедуры установки. Затем, когда он установлен, он расширяется до полного размера. Это предотвращает возможное обнаружение вируса и устраняет дополнительное время запуска, необходимое для распаковки программы в памяти. Также я подписываю код как мой исполняемый файл, так и мою процедуру установки, и некоторые методы сжатия несовместимы с что.
для получения дополнительной информации о сжатии см. вопрос StackOverflow:компрессор EXE Delphi?
ldsandon попросил меня предоставить именно те варианты, которые я использую, поэтому вот они:
при переходе с Delphi 7 на Delphi 2010., наш. exe вырос, например, с 16 мегабайт до 35 мегабайт.
Я задал вопрос, похожий на ваш на форуме Embarcadero несколько недель назад. (ссылке) в моем OP я перечислил ряд ссылок на эту тему, которые вы можете найти полезными.
мы пытались использовать UPX для сжатия наших .exe. Позволять ему работать часами значительно уменьшило наше .exe, но мы, вероятно, не использовать его в производстве для этих причины:
У нас очень много .exe и не хотят ждать 1/2-day на каждой сборке. (Возможно, мы могли бы найти набор параметров не-грубой силы для UPX, который уменьшил бы это. )
хотя размер .exe уменьшается, наш shippable не было, потому что наш установщик (неудивительно) не может выжать гораздо больше сжатия из уже сжатого файла. тогда как он смог уменьшить оригинал 16 Мег .exe до 8 мегабайт.
Я читал некоторые отчеты, которые в какое-то время (редко, но не никогда), UPX exe запускали различные антивирусные программы, чтобы сообщить, что приложение содержит вирус. (Я не помню дату, место или детали того, где я это видел, поэтому с моей стороны немного несправедливо сообщать об этом здесь.) Но мы настолько отрицательно относимся к риску того, что даже такая возможность произойдет,что UPX со стола.
ссылка на Форум Embarcadero также включает в себя ссылке к другой теме SO по этой теме.
Я по-прежнему удивлен и разочарован раздуванием кода, которое мы нашли при переезде в Delphi 2010. Как отмечает Ник, 2X для Unicode довольно избыточен.
однако раздувание является относительно небольшим компромиссом при переходе на D2010, потому что, IMO, D2010-такое потрясающее обновление во многих других отношениях. Но, это тут означает, что нам, вероятно, придется переехать в доставка 2 диска а не один. Я не с нетерпением жду реакции на это от нашей организации.
Не видя фактических настроек, которые использует ваша конфигурация сборки "Release", объясняя это увеличение размера, требует много спекуляций.
помимо некоторых, возможно, маловероятных факторов, приводящих к значительному увеличению количества кода, "втягиваемого", даже если он не используется, эта величина увеличения наиболее легко объясняется включением отладочной информации.
Я бы проверил настройки компилятора и компоновщика для:
- отладочная информация (настройка компилятора)
- TD32 информация (линкер)
- Удаленная отладочная информация (компоновщик)
сравните эти параметры в проекте Delphi 2009 с эквивалентами в Delphi 4.
вычесть ожидаемое увеличение 2X из Unicode, и вы получите неучтенное увеличение 2.5 X. Это имеет смысл, учитывая, сколько версий вы пропустили. Многое было добавлено в VCL и RTL с Delphi 4, и не все это вещи, которые можно легко smartlinked, даже если вы никогда не используете его. В зависимости от того, сколько единиц вы используете, вы можете перевозить довольно много дополнительного багажа.
Аллен Бауэр и команда компилятора добавили новая функция в D2010, чтобы помочь уменьшить этот, но, по-видимому, они идут осторожно и не использовали его во многих местах, как они могли бы. Надеюсь, мы увидим больше сокращения cruft в 2011 и последующих выпусках.
Я добавлю несколько слов. Линкер может удалить неиспользуемые процедуры и функции, только если он может следовать иерархии кода. Список кошмаров для linker перечисленных ниже:
код и структуры данных доступны с начала конца, инициализации, завершения секций единиц. Здесь у вас есть некоторый контроль, удаление ненужных вызовов или создание объекта. Даже если вы создаете объекты по требованию и освобождаете их только в разделе finalization, сделайте это осторожно
Если вы перейдете в tools / configure tools и настроите его так, вы можете легко сжать исполняемый файл, над которым вы работаете, с помощью пункта меню в IDE.
другой способ-посмотреть ,какой блок увеличивает размер ?'.
для этого я использую JCL 'Project Analyser IDE', интегрированный в IDE с установкой JCL/JVCL, он показывает вам все блоки с их соответствующим размером. Вы можете экспортировать его в текстовый файл. Если вы сделаете это с 2 environnements (D4 & D2009), у вас будет много соответствующей информации.
Я сделал несколько тестов, чтобы увидеть разницу между D2007 и D2010, потому что мы обновляемся до D2010. Я протестировал приложение GUI для управления среднего размера С около 60 формами (сетки с подробными формами, фреймами и т. д.). Мы используем компоненты TMS + Remobjects.
D2007:
"нормальная" компиляция: 18.8 mb
с debug dcu: 18.8 mb (тот же размер!)
D2010
нормальный: 23.9
отладка dcu: 48.8 mb (!)
поэтому использование двойников debug dcu наш exe размер.
тест с нашим бизнес-сервисом (без больших dfm):
D2007: 12.3 mb
D2010: 17.1 mb
Так что да, D2010 увеличивает exe (немного), но это не проблема для моего клиента.
Edit: некоторая информация о скомпилированном размере:
D2007:
D2010:
таким образом, увеличение размера кода, но более чем удвоение данных!
Если вы не хотите использовать компрессор exe, то вы должны дать StripReloc попробовать.
1) вы создаете подробный файл карты, и поскольку вы установили "используемый debug dcus", он также будет содержать символы для блоков RTL/VCL. Если он используется системами обработки исключений для создания стеков вызовов и тому подобное, его можно добавить в исполняемый файл. И если не сжать каким-то образом, это может сделать ваш .ехе размер довольно большой.
2) Использование debug dcus также сделает ваш .exe-файла несколько больше, потому что обычно они компилируются без оптимизации и отладки настройки, и они также сделают ваш код медленнее. Они не должны использоваться в финальной версии.
3) отладочная информация должна добавлять информацию debig только в устройство, а не в исполняемый файл, хотя для создания файла карты требуется IIRC.
Проверьте формат вашего dfm-s. Они должны быть в двоичном формате, если вы хотите сделать свой exe меньше.
поскольку D2010 добавляет расширенный RTTI, а RTTI является печально известным фактором увеличения размера exe, было бы интересно посмотреть, насколько велики двоичные файлы D2009 для этого приложения.
Если двоичные файлы D2009 значительно меньше, это не Unicode и т. д. Для моих собственных двоичных файлов у меня есть только увеличение 30% или около того от D7 до D2009.
стандартные единицы в новых delphi могут содержать больше строк и констант, таких как строки ошибок, которые включены, даже если вы отключите отладочную информацию. Проверьте свое использование.
не имеют большой части somution, кроме того, не используя конкретный блок или удаления ненужных данных из него.
(мой опыт работы с Delphi 5)
ранее было заявлено, что использование исполняемого компрессора уменьшает размер exe, но не установочного пакета. Однако, если вы хотите хороший компрессор, попробуйте ASPack.
@Tom1952: ASPack довольно быстро, всего несколько секунд, чтобы сжать файл
также вы можете изменить значок. Значок в новейшей Delphi IDE (ie XE3) совместим с Vista/7 и содержит все размеры (до 256x256, насколько я знаю). Таким образом, вы можете уменьшить размер exe-файла с изменением значка.
снимите флажок отладочная информация в параметрах проекта. Если embarcadero не может предоставить никакого решения или объяснения. Я думаю, что решение простое: не застрял только с Delphi есть много языков программирования, каждый из которых ограничен только воображением программиста.
Delphi site: daily Delphi-news, documentation, articles, review, interview, computer humor.
Рис. 2.5. Менеджер проектов
В этом окне в виде дерева представлены все модули, входящие в проект. В нашем случае пока есть только один модуль - Unitl. Выделите его и нажмите кнопку Del на клавиатуре или Remove на панели окна Project Manager Теперь сохраните проект под именем WinAPIProject
Рис. 2.6. Информация о проекте
Обратите внимание, что в строке Source Compiled области Program находится всего 13 строк откомпилированного исходного кода, а размер результирующего кода (строка Code Size) равен 309 408 байтов. При таком маленьком коде получился результирующий файл почти в 300 Кбайт.
Но если попытаться запустить этот файл на компьютере, где не установлен Delphi, то программа выдаст множество ошибок. Почему? В окне информации о проекте в области Packages Used (Используемые пакеты) перечислены необходимые для выполнения файлы. В данном случае это rtl70.bpl и vcl70.bpl. Это своеобразные динамические библиотеки, в них находится весь код VCL, без которого программа работать не будет. Получается, что мы не освободили программу от визуальной модели и она все еще используется.
Рис. 2.7. Диалоговое окно опций проекта, вкладка Packages
Рис. 2.8. Информация о проекте с параметром Build with runtime packages
Несмотря на небольшую программу, общий размер файлов, которые вы должны будете установить на компьютере пользователя, будет равен размеру ваших файлов плюс размер необходимых bpl-файлов. Эти файлы находятся в системной папке Windows/System32. Посмотрите на их размер. В данном случае два файла rtl70.bpl и vcl70.bpl занимают более 2 Мбайт, поэтому в действительности размер программы увеличился.
Давайте теперь снимем флажок напротив строки Build with runtime packages в свойствах проекта (см. рис. 2.7) и попробуем уменьшить размер файла другим способом. Удалите в исходном коде раздел uses и все, что находится между begin и end. У вас должен остаться только следующий код:
Откомпилируйте проект и посмотрите на информацию о нем (рис. 2.9).
Рис. 2.9. Информация о проекте без VCL
Вот теперь исполняемый файл занимает около 9 Кбайт и никакие дополнительные файлы не нужны.
Почему так резко изменился размер файла? Между begin и end у нас были вызовы методов объекта TAppl і cation. Для их использования нужно подключать в раздел uses модуль Forms. Этот модуль входит в состав VCL, и из-за него к программе подключается код, который на самом деле нами не используется.
Чтобы узнать, какие модули входят в VCL и сильно увеличивают размер, откройте любой файловый менеджер или проводник, и перейдите в папку Program Fi-les\Borland\Delphi7\Source. Если при инсталляции Delphi вы отказались от установки исходных кодов, то этой папки не будет, и ее надо искать на установочном диске. Если папка существует, то в ней будут исходные коды всех модулей, представленные в разных подпапках по типам. Все, что находится в VCL, подключать нежелательно. Большинство из этих модулей увеличат размер результирующего файла в несколько раз. А вот то, что находится в RTL, можно подключать без проблем.
Давайте проведем эксперимент. После строки program добавьте строку: uses button:
А теперь замените эту строку на следующую:
При компиляции проекта без раздела uses размер результирующего файла равен 9 124 байтов, а после добавления модуля windows размер увеличивается только до 9 252 байтов. И это несмотря на то, что мы подключили модуль windows, который занимает на диске более мегабайта (самый большой файл в составе RTL, описывающий основные функции Win API).
Исходный код рассмотренного здесь примера находится на компакт-диске в каталоге 5оигсе5\сп02\\Л/тАР1.
Читайте также: