最近我经过长时间的停顿后回到Delphi并编写了一个相当简单的实用程序应用程序,我的客户请求支持旧版本...
我知道这些天大小并不重要,但令我感到奇怪的是,单元应用程序在编译时达到了1'084'416 b可执行文件.我写的唯一.pas单位大约是20.8k,主要是因为gui的丰富性.
该uses条款如下:
uses
Windows, Messages, SysUtils, Variants, Classes, Controls, Forms, strutils,
Dialogs, ADODB, DB, DBGrids, ExtCtrls, DBCtrls, StdCtrls, Grids, Menus,
Buttons;
Run Code Online (Sandbox Code Playgroud)
我想知道是否有任何方法可以将应用程序的大小减少到300-400k或更少?
我已将项目从RAD Studio 2010升级到RAD Studio XE4.该项目主要是使用C++ Builder的一半RAD Studio进行的C++,其中包括Delphi的一些内容.
在2010年,Release版本为22MB.在XE4下,相同的Release版本为55MB.
这是一个问题,因为:
是什么导致这种情况,我该如何解决?
<UsePackages>True</UsePackages>Release not Debug中存在的东西; 删除它没有任何区别.除此之外,还启用了代码优化,缺少_DEBUG定义.{$WEAKLINKRTTI ON}.该XE4文件没有提到一个相当的C++编译链接.有#pragma explicit_rtti(C++类似物{$RTTI})和__declspec(delphirtti)(C++类似物{$M}/{$TYPEINFO}).我的Delphi win32 VCL应用程序被部署为一个大的exe.该应用程序是一个客户端服务器应用程序,具有连接到SQL Server的胖客户端.
这很方便(只需更新共享文件夹中的一个文件并更新应用程序 - 当然数据库模式也会更新).
由于我在每个版本中都使用了很多"胖"的第三方组件,比如ReportBuilder和DevExpress,因此exe大小的增长主要是因为这些组件变得越来越大.
在dpr我设置这些标志以确保从共享文件夹或可移动设备启动exe时,它总是加载到内存中(并避免奇怪的连接错误):
{$SetPEFlags IMAGE_FILE_NET_RUN_FROM_SWAP}
{$SetPEFlags IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP}
Run Code Online (Sandbox Code Playgroud)
如果exe是使用Release Build Configuration构建的,那么普通的exe通常会减小大约50%的大小(与Debug Build Configuration相比).但是因为我使用EurekaLog,使用Build而不是Debug构建只是略微减小了大小.
目前我的exe是115MB(使用"Build"Build配置和EurekaLog构建).
在任何人的经历中都可以吗?是否有一个已知的限制,建议不要超过?
以下是近年来规模的增长情况:
2014年:76MB
2015年:82MB
2016年:90MB
2017:97MB
2018年:115MB
由于我最近超过了100MB的限制,我开始担心.
我知道可以用运行时包构建,但我的问题集中在尽可能保持单个大exe方法.
我记得cnPack有一个我过去尝试过的Uses Cleaner功能.这可能有助于我删除一些未使用的单位,从而减少exe大小,但无论如何这不能阻止我超过100MB的趋势.
谢谢.
有一次,我有一个很好的小压缩实用程序,将我的Delphi编译的EXE打破到较小的下载大小,但现在我找不到它.有什么建议?
此外,使用这些实用程序有什么缺点吗?(我主要使用它们来缩短农村/拨号用户的下载时间).
当我将我的IOS应用程序部署到我的Mac时,IPA文件大小为87.3mb - 在我将应用程序发布到iStore之后,Apple向我发出警告告诉我,在他们做了一些东西后,它将大于100mb并且只允许用户通过Wi-Fi下载.对我来说,我的应用程序保持在100mb以下是非常必要的,以便用户可以通过移动连接下载它
现在 - 我已经做了一些在我看来应该减少应用程序大小但没有真正有用的东西
APK文件大小为43 MB,远远低于google想要的最大50mb
任何帮助或建议将Apple IOS IPA文件缩小都会很棒
编辑
按照@Robotic Cat在评论中的建议进一步检查我发现Unix可执行文件是罪魁祸首......这绝对与delphi如何构建和链接包
结束编辑有关

在这个问题(链接)中,据说下面的行(在每个单元中)将删除尽可能多的RTTI:
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}
Run Code Online (Sandbox Code Playgroud)
该帖子没有提及它的Delphi版本,但我假设是D2010.但是,当我包含上面的行时,我收到此错误:
DCC Fatal Error: E2158 System unit out of date or corrupted:
missing TVisibilityClasses.
Run Code Online (Sandbox Code Playgroud)
我正在使用D2010的"库存"版本,并且从未做过任何我知道会改变默认安装或库的内容.
有什么建议?TIA
相关问题:链接.
我在Delphi XE2中创建了一个简单的项目,只有3或4个delphi形式,大小只有8或9 KB.但如果我看到exe大小,它的12MB.我不知道怎么样?可能是什么原因?
已经delphi win32 exe的大小是~850 kb,他们有任何使exe大小更小的路线图,(我知道大小是因为vcl unicode RTTI等等),delphi编译整个单元甚至只有一个小功能这个单位是必需的.所以有任何设施,或第三方产品,(我知道kol和mck做同样的事情)
delphi ×8
exe ×3
c++builder ×1
compilation ×1
compression ×1
delphi-2009 ×1
delphi-xe2 ×1
executable ×1
filesize ×1
firemonkey ×1
ios ×1
linker ×1
rtti ×1
size ×1
winapi ×1