[Z原创]程序压缩 VS 程序内存占用

程序压缩 VS 程序内存占用

AuthorJimmy Zha (zhajm@56.com)
2006-03-09

    下载本文word文档

 

    下载Aspack 2.12下载UPX Shell下载NsPack

 

    最近的工作需要用到两个第三方的DLL,但其尺寸十分巨大,令人很不爽-_-。回想以前曾经使用过Aspack来压缩EXE文件,于是Google了一个下来。压缩之,压缩率令人十分满意,9.16MBDLL压缩到了2.76MB,压缩到原来小大的30%左右。高兴之余,余光扫到任务管理器里面的内存占用,铛!一下子就郁闷了。原来只占5MB左右内存的程序,现在一启动就占了20MB,巨寒!

    继续放狗找,没有查到关于 "程序压缩VS程序内存占用" 的文章。算了,自己测试一下吧,顺带又下载了两个类似Aspack的软件,一个是UPX,一个是国人写的NsPack

PS

1)、测试的目的在于评估程序压缩和内存占用的取舍之道。没有对压缩软件的主观倾向。对于每一个压缩程序,基本采用默认设置,NsPack设置项比较多,参照其官方网站上的说明进行了少许设置。

2)、这只是一个比较粗略的测试和统计,内存占用的精确度只到K,也不会像很正式的评测那样测试3次取平均值、每次测试结束重启之类:)。但是这些数据相信还是比较有说服力。

3)、测试所用的程序是一个MFC程序,很简单的UI,底层有一些逻辑处理并调用第三方的DLL产生结果。



具体数据:

一、压缩前后文件大小比较:

两个DLL原始大小:9.16MB, 8.31MB

Aspack(版本2.12)压缩后大小:2.30MB, 2.05MB

UPX(版本1.90)压缩后大小:2.76MB, 2.46MB

NsPack(版本3.5)压缩后大小:2.20MB, 1.95MB

二、程序占用内存比较:

单位:K

1、  原始未压缩版本:

启动:

内存:6,500

虚拟内存:5,700

Running

内存:15,000

虚拟内存:12,000

Finished

内存:12,800

虚拟内存:14,000

2、  Aspack压缩版本:

启动:

内存:20,900

虚拟内存:20,200

Running

内存:28,700

虚拟内存:26,700

Finished

内存:26,000

虚拟内存:23,600

3UPX压缩版本:

启动:

内存:22,500

虚拟内存:20,500

Running

内存:30,000

虚拟内存:27,000

Finished

内存:27,000

虚拟内存:24,000

3、  NsPack压缩版本:

启动:

内存:26,000

虚拟内存:27,600

Running

NA:执行函数的时候程序崩溃,应该是压缩之后DLL的问题,其他两个软件运行正常,也有可能是我参数设置不对,我已经反复设置参数多次,还是会Crash掉:(。

Finished

NA

       写在最后:

1、  首先是要肯定Aspack等压缩软件确实能比较好的压缩程序尺寸,特别是那种资源、数据较多的EXEDLL。压缩率令人满意!之外应该还有一定的加密、加壳、防反编译等功效(这不是本文讨论的范围)。有兴趣的朋友可以去研究一下,UPX是开源的。

2、  从程序运行的角度来看,压缩之后的程序,势必存在一个数据解压还原的过程,所以程序启动的速度会慢一些(对我这个小程序来说就是在启动压缩版本的时候有明显的停顿感,不过基本可以忽略)。对于我的这个程序这样的大DLL,压缩版本运行时候的内存占用膨胀非常明显,这个时候就看选择了,是选择小的文件尺寸还是小的内存占用:)。对于我来说这个应用宁愿选择大的文件尺寸,因为我发布的时候可以用RAR来打包发布(测试过,最后都使用RAR打包,用Aspack等软件压缩过和没有压缩的差别只有0.5MB左右)。对于一个小程序,压缩和未压缩的内存占用变化应该不会像本例这样夸张。

3、  使用Aspack等软件压缩程序是个不错的选择,可以在自己程序发布的时候先测试一下,根据测试结果来斟酌是否压缩发布。

4、  NsPack可以对MFC71.DLLmsvcp71.dllmsvcr71.dll进行压缩,压缩率同样不错。而AspackUPX均不能压缩,另外其官方网站上说明支持.NET程序

原文地址:https://www.cnblogs.com/Jimmy/p/346773.html