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

Моя программа VB6 в настоящее время компилируется в исполняемый файл размером 6 МБ. Я предполагаю, что это не проблема современных машин, но я хотел бы уменьшить его до менее мегабайта.

Как лучше всего это сделать?

Примечание. Я уже пытался выполнить "Оптимизацию для небольшого кода". Это фактически увеличило размер EXE до 16 МБ!

Если решение состоит в том, чтобы выделить часть кода в отдельную DLL, как лучше всего это сделать? Должны ли вы оставить все формы в EXE и поместить все классы и модули в DLL? Откуда мне знать, что именно заставляет EXE быть таким большим?


person Gary Jones    schedule 20.02.2012    source источник
comment
Я бы не парился по поводу размера. Разделение кода на библиотеки DLL — хорошая идея, потому что это делает проект более управляемым. Разделите его на логические автономные фрагменты, а не пытайтесь сделать каждый фрагмент определенного размера.   -  person MarkJ    schedule 20.02.2012
comment
Вы не думаете, что 6 МБ слишком много для EXE?   -  person Gary Jones    schedule 20.02.2012
comment
Лично я бы не беспокоился о размере. Действительно ли это вызывает проблему? 6 мегабайт в наши дни невелики, если вы думаете о дисковом пространстве, времени загрузки или о чем-то еще. Но вы можете разделить код, чтобы сделать его более управляемым.   -  person MarkJ    schedule 20.02.2012
comment
Насколько мне известно, это не вызывает никаких проблем, но когда я вижу коммерческие приложения, такие как VS, чьи EXE-файлы меньше половины мегабайта, это меня немного беспокоит.   -  person Gary Jones    schedule 20.02.2012
comment
Если вы имеете в виду Visual Studio, сопутствующие зависимости составляют сотни мегабайт. Так зачем беспокоиться?   -  person MarkJ    schedule 20.02.2012
comment
@MarkJ: Размер EXE-файлов, похоже, не превышает 1 МБ. Например, IE составляет ~ 730 КБ. Для этого должна быть веская причина, потому что они могли наполнить их сколько угодно.   -  person CJ7    schedule 20.02.2012
comment
@GaryJones Ознакомьтесь с моим ответом о компиляции в P-Code, выполнении виртуального сжатия exe (автоматически распаковывается в память только при запуске, остается в виде exe-файла), проверке размеров ваших файлов .ico, использовании директив #IF для удаления кода и строк, которые конечный пользователь никогда не будет видеть/использовать/не нуждаться и (как предлагали другие) проверять изображения/звуки/видео и другие ресурсы, которые встроены в ваш скомпилированный файл приложения VB6 EXE. Я уверен, что вы можете уменьшить размер вашего 6-мегабайтного файла до 200-500 КБ (максимум) БЕЗ потери какой-либо функциональности или внесения радикальных изменений. Дайте мне знать, как это происходит.   -  person Erx_VB.NExT.Coder    schedule 03.06.2013
comment
Обратите внимание, что Visual Studio создавалась как очень модульная. devenv.exe — это не более чем заглушка и контейнер для остальных библиотек и языков.   -  person Deanna    schedule 03.06.2013


Ответы (6)


Скорее всего проблема не в вашем коде, а в ресурсах. Например, у вас, вероятно, есть большое изображение, помещенное в элемент управления Picturebox в какой-либо форме. Изображение сохраняется как несжатое растровое изображение, и именно это влияет на размер EXE. Если это ваша проблема, переместите изображение из приложения во внешний JPG.

Другой пример: у вас есть куча отчетов в приложении, и каждый из отчетов имеет логотип компании в верхнем/нижнем колонтитуле. Централизуйте логотип в другом месте и получите к нему доступ с помощью вспомогательного метода.

person AngryHacker    schedule 20.02.2012
comment
Я бы сказал то же самое. Если вы не уверены в размерах, проверьте размер файлов .frx и .res в папке вашего проекта. - person stracktracer; 20.02.2012

Должен сказать, компилируется в P-Code, он должен быть где-то на вкладке «Создать» с дополнительными параметрами. Это уменьшает мой EXE-файл с 700 КБ до 200 КБ (большая разница). Затем выполните сокращение изображений/звука/других ресурсов, как предложили другие.

Также проверьте свои иконки! Некоторые значки могут занимать до 250 КБ НА КАЖДЫЙ ЗНАЧОК, и если у вас есть несколько форм с несколькими разными значками, это может складываться. Размер типичного современного значка составляет около 50 КБ, но может быть и больше, так как разные разрешения значков сохраняются для разных цветов и настроек отображения, поэтому в одном файле .ico значка у вас будет 4 изображения значка для отображения высокой графики, еще 4 для более низкого графического дисплея (256-битный цвет) и еще 4 для 16-битного цвета и т. д., и вы можете получить 16-20 изображений значков в одном файле .ico только для одной формы. Вы можете удалить изображения значков, такие как статические изображения, в серии изображений gif, их можно удалять кадр за кадром (или изображение значка за изображением в этом случае), а также можно удалить 16-битные и 256-битные параметры цвета.

Теперь, к моей следующей рекомендации, используйте директивы #IF для удаления любых текстов отладки/отчетности, которые есть в вашем приложении, которые никогда не будут видны ни одному из пользователей (строки, которые не нужны конечным пользователям) и/или любые дополнительные функции вы используете для тестирования/отладки или создания отчетов, которые не нужны конечному пользователю... вы можете удалить все это с помощью директивы #IF. Вы можете включать и выключать все свои директивы #IF (аргументы условной компиляции) одним выстрелом, установив постоянное логическое значение в окне свойств, дополнительную информацию об этом можно найти в одном из моих сообщений о директивах #IF и размере файла здесь. : Когда я использую условную компиляцию Аргументы в пользу исключения кода, почему размер файла VB6 EXE не меняется? (также есть много замечательных сообщений StackOverflow, описывающих, как выполнять условную компиляцию с использованием директив #IF THEN #ELSE #END IF, просто выполните поиск).

Наконец, к моей последней рекомендации, после того, как вы уменьшили размер файла в 3-4 раза, используя только компиляцию p-кода, вы можете уменьшить его еще в 3-4 раза, используя приличный EXE-компрессор! Таким образом, просто используя сжатие p-code и exe, я уверен, что вы можете уменьшить размер вашего 6-мегабайтного файла до 600 КБ (даже без какой-либо другой оптимизации, связанной с директивами #IF, файлами значков и другими изображениями/звуковыми ресурсами). Поскольку компиляция p-кода НЕ связана со сжатием, добавив сжатие exe, вы можете значительно уменьшить размер файла без потери расширения .exe. Используя хороший компрессор, я не говорю об изменении его на файл .zip или файл .rar или что-то еще. После сжатия он по-прежнему останется в виде .exe, но также будет сжат, и люди могут запускать его и использовать в обычном режиме, не замечая никакой разницы, поэтому, как только ваш exe выполняется, он распаковывается в память и загружается в память все на лету, и когда вы закрываете приложение, ничего не меняется (размер файла все тот же, маленький и сжатый). Версия PECompact с графическим интерфейсом — хороший вариант, она может быть даже доступна для некоторых размеров торрентов, + несколько бесплатных опций с точки зрения программ, которые это делают.

Подводя итог, сделайте компиляцию p-кода из вашего VB6, сделайте вкладки расширенного / раздела компиляции, посмотрите на разницу. Затем выполните каждую оптимизацию, перекомпилируйте и отметьте разницу в размере файла, и вы получите хорошее представление о том, какое влияние окажет каждое изменение. Повторяйте, пока не испробуете все варианты. Самые большие различия будут связаны с компиляцией p-кода и сжатием exe. Конечно, директивы resources/icons/#IF вы должны попробовать после параметров p-кода и сжатия, поскольку p-код и сжатие являются самыми простыми и, скорее всего, уменьшат размер вашего файла до 10% от его исходного размера (10 x разница вместе взятые).

Наконец, дайте мне знать, как вы ладите, мне любопытно, как это получается. Кроме того, p-код работает на всех компьютерах/компьютерах, которые имеют Visual Basic Runtime, так что на самом деле нет никакого подвоха. Говорят, код p-кода работает немного медленнее, чем обычный скомпилированный код, но разница настолько мала, что вообще не заметна. Учитывая, что ПК сейчас такие быстрые, разницу в скорости работы заметить еще труднее (гораздо более незначительной), чем это было, когда впервые вышел VB6, поэтому я действительно считаю его идеальным бесплатным обедом, особенно если размер файла важен. тебе.

Дайте мне знать, как это происходит, или если у вас есть какие-либо дополнительные вопросы. Ваше здоровье.

person Erx_VB.NExT.Coder    schedule 02.06.2013

Если вы пишете новый код, вы действительно должны писать для VB.Net.

Одним из многих преимуществ VB.Net по сравнению с VB6 (помимо очевидного «VB6 больше не поддерживается») является большой набор готового к использованию кода, встроенного в среду выполнения .Net (что приводит к соответственно меньшему .EXE).

Помимо этого, одна вещь, которая может вызвать большие .exe, — это использование большого количества растровых изображений. Возможно, вы захотите увидеть, виноват ли он. Если это так, вы можете получить ОГРОМНОЕ уменьшение размера файла, просто загружая изображения во время выполнения.

person paulsm4    schedule 20.02.2012
comment
Это правда, что VB6 не находится в постоянной разработке, но MS заявила, что даже Win8 будет поддерживать приложения VB6. - person Gary Jones; 20.02.2012
comment
В интересах точности: IDE VB6 больше не поддерживается, но среда выполнения VB6 поддерживается полностью. Подробнее см. в нашей вики тега VB6. Кроме того, если экзешник уже 6 мегабайт, то поздновато советовать начинать с нуля в VB.net - person MarkJ; 20.02.2012

6 мб кажется большим для приложения vb6. Возможно, у вас есть некоторые звуковые или графические ресурсы в приложении.

Для изображений ... используйте какую-нибудь утилиту, например Photoshop, чтобы уменьшить размер. Также загружайте изображения во время выполнения. Это должно дать вам меньший exe

person user1947746    schedule 06.01.2013

Вы можете попробовать этот компрессор.

http://www.exetools.com/files/compressors/win/petite22.zip

Защитите и сожмите исполняемый файл Vb6.

person Mahdi Hassani Goodarzi    schedule 18.05.2015

Попробуйте этот компрессор: UPX. Это бесплатно и быстро.

person aprados    schedule 07.09.2015