使用Delphi构建的exe大于100MB是否有任何风险?

时间:2018-03-27 07:27:41

标签: delphi exe delphi-10-seattle

我的 Delphi win32 VCL应用程序作为单个大型exe部署。该应用程序是一个客户端服务器应用程序,其胖客户端连接到 SQL Server

这很方便(它足以更新共享文件夹中的一个文件并且应用程序已更新 - 当然数据库模式也会更新)。

由于我在每个版本中都使用了很多“胖”的第三方组件,例如 ReportBuilder DevExpress ,因此这些组件的大小越来越大,因为这些组件越来越大。

在dpr中我设置了这些标志,以确保从共享文件夹或可移动设备启动exe时,它总是加载到内存中(并避免奇数连接错误):

{$SetPEFlags IMAGE_FILE_NET_RUN_FROM_SWAP}
{$SetPEFlags IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP}

如果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的趋势。

感谢。

2 个答案:

答案 0 :(得分:1)

我问EurekaLog,他们回复说:

  

EurekaLog处理后的EXE大小主要是确定的   按MAP文件的大小。其他影响尺寸的东西   EXE包括您选择的EurekaLog选项,例如内存检查,   发件人,JCL支持,等等。

     

您可以通过选择EL来稍微减小EXE的大小   压缩选项。请记住,压缩会影响启动   时间,因为调试信息需要在你解压缩时   启动EXE。

     

您可以通过关闭调试来进一步减小MAP文件大小   您不需要堆叠的程序部分信息   崩溃后跟踪。像DevExpress这样的大型组件库会   是一个好的开始。

     

最后,您可能还有其他编译器选项,例如已启用范围检查   与EurekaLog一起开/关。一些编译器选项可以贡献   到EXE大小。

     

您可以使用我们的EurekaLog PE分析仪查看有关调试的详细信息   信息大小,压缩等。

所以当用户Ville Krumlinde说调试信息是原因时,他就是对的。所以要回答这个问题,有一个大的exe没有问题,减少exe大小必须使用Release Build Configuration,使用Eureka Log应该尽量减少他的地图文件大小,在上面的引用大多数提示都有

答案 1 :(得分:0)

您可以使用"Store all names externally" option将一些调试信息卸载到外部文件,但是您的可执行文件将不再是独立的。