Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 600

/ вопрос решён /

Здравствуйте, уважаемые эксперты!

Вы бы не могли пояснить - как можно уменьшить размер программ, не используя API. Тоесть отключить какие либо функции\опции и т.п... Заранее спасибо=\

Fen-Omen Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Fen-Omen (статус: Посетитель)
Вопрос отправлен: 27 мая 2007, 22:35
Состояние вопроса: решён, ответов: 3.

Ответ #1. Отвечает эксперт: Роман

Здравствуйте, Fen-Omen!Используя VCL получить приложение размером меньше 300кб практически невозможно, так уж она устроена. Можно применить библиотеку KOL - это библиотека объектных типов для программирования в среде Delphi. Основная цель KOL - уменьшение размера конечной программы (Win32, GUI) в 5-10 раз по сравнению с тем, что дает VCL. Поддерживаются все 32-разрядные версии Delphi, начиная с Delphi2 и заканчивая Delphi6. MCK - это набор зеркальных компонент, позволяющих разрабатывать проект на основе библиотеки KOL визуально. Компоненты MCK устанавливаются на палитру компонентов, работа с ними происходит так же, как это обычно делается в Delphi при визуальной разработк. В откомпилированном проекте визуальные компоненты замещаются своими невизуальными двойниками из KOL. Использование MCK сокращает размер исполнимой программы так же, как и при использовании KOL невизуально. Преимущество - визуальная разработка. Недостаток - зависимость от версии Delphi. Официальный сайт KOL - http://kol.thaddy.co.uk/rindex.htm.
Второй вариант использовать пакеры, например ASPack - очень мощный популярный EXE/DLL-пакер от Алексея Солодовникова. Программа отличается удобным графическим мультиязычным интерфейсом и уникальной функцией сжатия DPL и BPL файлов (Delphi DLL). Программы и библиотеки сжатые ASPack занимают на диске значительно меньше места и при этом в большинстве случаев загружаются и запускаются быстрее

Ответ отправил: Роман (статус: 5-ый класс)
Время отправки: 28 мая 2007, 00:37
Оценка за ответ: 5

Комментарий к оценке: Роман, большое вам спасибо. Именно такого подробного ответа я и ждал!

Ответ #2. Отвечает эксперт: ANBsoft

Здравствуйте, Fen-Omen!
Я бы посоветовал упаковщик UPX.exe, в моей практике он сжимает сильнее чем ASPack.
Для теста только что сжал свою программу (UPX версии 3.00w),исходный размер 3993088, полученный файл 860672. При этом UPX работает под многими платформами.

Ответ отправил: ANBsoft (статус: Студент)
Время отправки: 28 мая 2007, 10:03
Оценка за ответ: 5

Ответ #3. Отвечает эксперт: Вадим К

Здравствуйте, Fen-Omen!
Итак, по порядку. Пакеры и упаковщики. Хотя они и ужимают программу (но редко больше чем в 3-5 раз), но в памяти они всё равно разжимают. К тому же, когда ваша программа грузиться несжатая, то Windows может не загружать некоторые части файла, а подгружать потом по мере надобности. Это очень экономно к памяти. Припустим у вас в ресурсах есть большая картинка для заставки. Так вот хотя она и будет подгружена при отображении заставки, потом она будет выгружена, когда память понадобиться. Причём не в своп, а просто удалена с памяти, так как виндовс знает, что эта часть файла не меняется и она всегда подгрузит заново по мере надобности. В случае с пакером вся программа грузиться в оперативку и сбрасываться может только в своп. Как результат больше тормозит и нагрузка на систему.

Вы хотите и прогу уменьшить, и апи не юзать. апи в любом случае юзается. Явно или неявно. тут ничего не поделаеш.

Теперь по поводу размера. Так уж повелось, что сейчас если игрушка занимает 3-4 гигабайта, то это плохая игрушка, ибо нормальная должна занимать 7-10.
Если ваша софтина занимает 2 мегабайта - не партесь. Это может быть преградой, когда вы пишете вирусоподобный софт. Но АПИ знать тогда уж обязаны. Я пишу много утилит и размер редко превышает мегабайт. Я считаю, что это вполне нормальный размер. Как я достигаю его? Очень просто:
- не использую сторонных библиотек. Например TMS добавляет к вашему приложению сразу мегабайт. Хотя вы только едит ихний поставили
- не ставлю на форму тучу TImage, в которые загружены большие, к тому же в bmp формате, картинки. Очень много памяти кушает. если вы добавили две картинки по полтора мегабайта - два красивых бекграунда для формы, то это добавит весу где то на 6-7 мегабайт. Лучше картинки хранить рядом возле exe или в ресурсах.

и последнее. Если вы пишете большой комплекс, где будет 5-10 exe, то есть ещё один ход. Использовать пакеты времени выполнения. обычно их все отключают, но они могут и пригодиться. Отключать здесь - Project -> Options... -> Packages - Build with runtime package.
Давайте оценим выиграш в размере
Обычный, голый exe в 7 делфи весит 370176 байт. с пакетами - 16896 байт. Правда он юзает два пакета rtl70.bpl(783360 байт) и vcl70.bpl(1383936 байт). их сумарный вес - 2167296 байт. произведя несложные расчёты, приходим к выводу, что при 7 exe вы уже в выиграше, так как bpl файлы используются одни и теже. При достаточно навороченом приложении количество bpl обычно пополняется ещё одним - двумя, но это не страшно. К тому же вы можете один раз скопировать эти файлы пользователю и больше не морочиться. тоесть вы говорите в инстале, если потребует такие файлы - качаете с нашего сайта.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 28 мая 2007, 13:48
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 1; последнее сообщение — 29 мая 2007, 00:40; участников в обсуждении: 1.
Fen-Omen

Fen-Omen (статус: Посетитель), 29 мая 2007, 00:40 [#1]:

Вадим, Александр Николаевич, Роман - Большое вам спасибо. Мне был очень важно услышать ваш ответ.

31 января 2011, 19:23: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:41
Выполнено за 0.02 сек.