• [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程序

  • 相关阅读:
    用户体验评价
    第十三周总结
    第十二周总结
    单词统计
    第十一周总结
    冲刺(十一)
    用户模板和用户场景
    冲刺(十)
    冲刺(九)
    IOS 学习记录
  • 原文地址:https://www.cnblogs.com/Jimmy/p/346773.html
Copyright © 2020-2023  润新知