| 
| 
 | Вопрос # 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) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |