LaB*_*cca 6 delphi exe delphi-10-seattle
我的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的趋势.
谢谢.
我询问了 EurekaLog,他们回答说:
EurekaLog 处理后 EXE 的大小主要取决于 MAP 文件的大小。其他影响 EXE 大小的因素包括您选择的 EurekaLog 选项,例如内存检查、发送器、JCL 支持等。
您可以通过选择 EL 压缩选项来稍微减小 EXE 的大小。请记住,压缩会影响启动时间,因为启动 EXE 时需要解压缩调试信息。
您可以通过关闭程序中崩溃后不需要堆栈跟踪的部分中的调试信息来进一步减小 MAP 文件大小。像 DevExpress 这样的大型组件库将是一个好的开始。
最后,您可能还有其他编译器选项,例如与 EurekaLog 一起打开/关闭范围检查。某些编译器选项可能会影响 EXE 的大小。
您可以使用我们的 EurekaLog PE 分析器查看有关调试信息大小、压缩等详细信息。
因此,用户 Ville Krumlinde 说调试信息是原因时是正确的。因此,要回答这个问题,拥有一个大的 exe 是没有问题的,为了减少 exe 的大小,必须使用发布构建配置,要使用 Eureka Log,应该尝试减少映射文件的大小,在上面的引用中,大多数提示都在那里。