• 问题-[DelphiXE2]编译程序体积大的问题


    作者:cashfly 发布:2012-03-27 15:12 

    最近准备换Delphi高版本来写程序,以前一直用7。想体验一下新版本带来的便捷,首先有一个体积问题,看下文介绍。

    首先,在IDE里可以直接编译Win32,Win64和OSX的程序(当然,要调试运行OSX程序,你需要相应的环境)
    其次,FireMonkey没有VCL的控件丰富,比如FireMonkey没有RichEdit控件。
    第三,FireMonkey程序无论是独立运行还是调试运行,初始化都没有VCL程序流畅。显然是因为FireMonkey程序还要涉及硬件GPU的初始化工作。
    最后说说编译后的程序大小。其实最终得到的程序并不大,由于编译器的变化,XE2里Debug版程序比Release版程序大很多,要减小程序体积,就使用Release版。下面给出稍微具体点的信息(都是空程序):
    Win32 Debug版 VCL程序大约6M FireMonkey程序大约8M
    Win32 Release版 VCL程序大约1.5M FireMonkey程序大约3M
    Win64 Debug版 VCL程序大约7M FireMonkey程序大约9M
    Win64 Release版 VCL程序大约2M FireMonkey程序大约4M

     

    减小体积的方法:

    1、最终使用Release编译模式

    2、关闭RTTI反射机制减少EXE文件尺寸在Interface下面加如下代码

    { 关闭RTTI反射机制减少EXE文件尺寸 }
    {$IF CompilerVersion >= 21.0}
    {$WEAKLINKRTTI ON}
    {$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}
    {$IFEND}

    3、最终发布程序可再使用Free_UPX(推荐)或ASPACK再次压缩。

     

    这样下来,使用Delphi XE2编译的程序体积可小很多了。虽然还是比Delphi 7大,但可接受了。

    在后续版本中,我会陆续分享在使用Delphi的一些心德与遇到的问题。

  • 相关阅读:
    斐波那契数列 的两种实现方式(Java)
    单链表反转
    单链表合并
    两个有序list合并
    list去重 转载
    RemoveAll 要重写equals方法
    Java for LeetCode 138 Copy List with Random Pointer
    Java for LeetCode 137 Single Number II
    Java for LeetCode 136 Single Number
    Java for LeetCode 135 Candy
  • 原文地址:https://www.cnblogs.com/FKdelphi/p/4654652.html
Copyright © 2020-2023  润新知