|
Вопрос # 600/ вопрос решён / |
|
Здравствуйте, уважаемые эксперты!
Вы бы не могли пояснить - как можно уменьшить размер программ, не используя API. Тоесть отключить какие либо функции\опции и т.п... Заранее спасибо=\
 |
Вопрос задал: 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 (статус: Посетитель), 29 мая 2007, 00:40 [#1]:
Вадим, Александр Николаевич, Роман - Большое вам спасибо. Мне был очень важно услышать ваш ответ.
|
31 января 2011, 19:23: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|