пятница, 30 января 2009 г.

Тестирование упаковщиков EXE-файлов

Собственно первая запись в блоге по теме, с чем я вас и поздравляю. 
Попробую провести небольшой сравнительный тест архиваторов для EXE. На истину в последней инстанции не претендую, но может кому и будет полезно, а мне будет интересно, т.к. по роду моей деятельности (программист, если кто не понял) частенько приходится паковать разную ерунду от крохотных утилит, до весьма прилично весящих программных комплексов. 

Для теста я закачал шесть наиболее распространенных, на мой взгляд, упаковщиков. Версии, вроде, везде последние на сегодняшний день, но обещать этого со 100% уверенностью не стану. Итак, вот наш список: 
  • AsPack 2,12 
  • FSG 2,0 
  • Mew11 SE 1,12 
  • NsPack 3,7 
  • PECompact 2,98 
  • UPX 3,03w
Тестирование я буду проводить на трех разных программах: winword.exe из пакета MS Office 2007, dmaster.exe версии какой-то не самой свежей, и wtv.exe (тулза для просмотра DDS-текстур). Все тестовые образцы имеют сильно отличающийся размер и созданы с использованием разных компиляторов: VC++ 7, Delphi 6/7, VC++ 6 Debug соответственно. 
Задачей теста ставится сравнение эффективности упаковщиков в зависимости от исходного размера файлов, их компилятора и наличия отладочной информации в EXE. Для тестов будет использован максимальный уровень компрессии, но везде, где есть возможность, будут проставлены опции совместимости. Таким образом добитваться преимущества в сжатии путем, скажем, неработоспособности на Windows 98/Me я не буду. Думаю, можно приступать к тестированию. 

winword.exedmaster.exewtv.exe
Начальный размер12,037,6883,280,896102,400
AsPack5,551,6721,127,93655,296
FSG6,619,0091,411,09751,853
Mew115,181,1681,078,89449,096
NsPack4,991,4881,010,68850,176
PECompact4,827,1921,017,85650,176
UPX5,760,0561,120,25650,688

Итак, результаты есть, можно наслаждаться. Размеры файлов в таблице приведенны, ессно, в байтах. Лидеров у нас три: Mew11, NsPack и PECompact. Они значительно оторвались от своих конкурентов вцелом и каждый из них победил на упаковке определенного файла. Явный аутсайдер сравнительного теста - FSG, что и не удивительно, пакер не обновлялся с 2004 года. 

Дальнейшие выводы читатели могут сделать самостоятельно, но есть одно "но". Упаковщик с самым высоким уровнем компрессии далеко не обязательно самый "крутой". Для сжатия EXE-файлов очень важен еще один параметр - скорость распаковки, ведь конечный пользователь не будет особо рад программе, которая стартует пол часа. А победители на настройках максимальной компрессии как раз и не могут особой скоростью похвастать. 
Следует отметить, что файл winword.exe размером в 12Мб был взят для теста, вообще, исключительно в образовательных целях. Сжимать программу такого размера - сущий маразм, она и так не очень то быстро стартанет на многих машинах. В общем таблица перед вами, пробуйте, тестируйте, выбирайте.