相关疑难解决方法(0)

如何实现较小的可执行文件?

最近我经过长时间的停顿后回到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或更少?

delphi executable compilation filesize delphi-2009

13
推荐指数
4
解决办法
1万
查看次数

与C++ Builder 2010相比,C++ Builder XE4中EXE大小增加三倍的原因是什么?

我已将项目从RAD Studio 2010升级到RAD Studio XE4.该项目主要是使用C++ Builder的一半RAD Studio进行的C++,其中包括Delphi的一些内容.

在2010年,Release版本为22MB.在XE4下,相同的Release版本为55MB.

这是一个问题,因为:

  • 对于EXE来说,55MB非常大
  • 启动程序需要相当长的时间(不多,但有些.)
  • 我们的许多客户在海上时从偏远地区或船上下载新版本.大小事项.

是什么导致这种情况,我该如何解决?


笔记

  • 奇怪的是,调试版本仍然只有23MB.项目设置似乎非常相似.我扩展了选项集的导出,只看到<UsePackages>True</UsePackages>Release not Debug中存在的东西; 删除它没有任何区别.除此之外,还启用了代码优化,缺少_DEBUG定义.
  • 调试信息用于发布版本生成的,而是进入一个外部.tds文件.(这将在未来用于EurekaLog,目前允许我们调试程序的发布版本.)我想知道链接器是否在调试信息中链接,但据我所知,C++链接器始终将调试信息放入外部文件,存在,加上EurekaLog尚未在构建中启用.
  • 项目文件(.cbproj)是在XE4中创建的,而不是从旧的2010年升级而来.我创建了新项目并添加了旧的.cpp和.pas文件.这是为了避免升级引起的问题 - 在Embarcadero论坛上,经常建议在升级IDE版本时重新创建项目.在此之前,我确实遇到的问题比2010年少.
  • 有很多提及Delphi XE2 + EXE明显比旧版Delphi产生的大.(1,2,3,4,5,6).尽管在C++接头是一种通过用Delphi不同,它是可能的原因是相似的.
    其原因似乎主要是Delphi RTL代码使用的RTTI,在Delphi项目中可以通过指定删除{$WEAKLINKRTTI ON}.该XE4文件没有提到一个相当的C++编译链接.有#pragma explicit_rtti(C++类似物{$RTTI})和__declspec(delphirtti)(C++类似物{$M}/{$TYPEINFO}).
  • 该项目使用运行时包和动态RTL进行链接.它是一个32位VCL表单应用程序.我在Windows 7上安装了XE4 Update 1.
  • 编辑: David Heffernan在下面的评论中询问每个项目的.map文件大小.
    发行版.map大小为17MB,.tds大小为80MB.
    Debug现在已停止链接,链接器报告它内存不足(一个旧的,早就应该修复过的bug了.)没有生成.map或.tds文件,所以我不能给出比较大小准确.从内存来看,.tds大概是100MB,不幸的是我不记得.map的大小了.如果我得到项目链接,我会更新问题.
  • 再次编辑:我找到答案(sortof) - 将'扩展内联函数'关闭会将EXE大小减小到预期值.这令人费解 - 请参阅下面的答案.请注意,调试版本已经关闭并仍然无法链接,从而导致内存不足错误.
    我还没有将我的答案标记为正确,以防万一有人可以提供一些有关正在发生的事情的见解,这将是一个更好的答案,而不仅仅是"关闭此选项".

delphi linker c++builder c++builder-xe4

9
推荐指数
1
解决办法
1352
查看次数

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

我的Delphi win32 VCL应用程序被部署为一个大的exe.该应用程序是一个客户端服务器应用程序,具有连接到SQL Server的胖客户端.

这很方便(只需更新共享文件夹中的一个文件并更新应用程序 - 当然数据库模式也会更新).

由于我在每个版本中都使用了很多"胖"的第三方组件,比如ReportBuilderDevExpress,因此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 delphi-10-seattle

6
推荐指数
1
解决办法
323
查看次数

德尔福EXE压缩机?

有一次,我有一个很好的小压缩实用程序,将我的Delphi编译的EXE打破到较小的下载大小,但现在我找不到它.有什么建议?

此外,使用这些实用程序有什么缺点吗?(我主要使用它们来缩短农村/拨号用户的下载时间).


相关问题:使用UPX压缩Windows可执行文件有什么缺点吗?

compression delphi exe

5
推荐指数
2
解决办法
5953
查看次数

IOS 64位IPA文件大小压缩

当我将我的IOS应用程序部署到我的Mac时,IPA文件大小为87.3mb - 在我将应用程序发布到iStore之后,Apple向我发出警告告诉我,在他们做了一些东西后,它将大于100mb并且只允许用户通过Wi-Fi下载.对我来说,我的应用程序保持在100mb以下是非常必要的,以便用户可以通过移动连接下载它

现在 - 我已经做了一些在我看来应该减少应用程序大小但没有真正有用的东西

  • 压缩我在应用程序中使用的所有图像(所有图像的组合大小小于3MB - 包括启动画面和启动器图标)
  • 删除了对单位的所有不必要的引用(清理了"使用"部分)
  • 删除了可以在代码中实例化的所有设计时组件
    • 我没有使用livebindings
    • 我正在使用Firedac和SQLite(数据库小于1MB)

APK文件大小为43 MB,远远低于google想要的最大50mb

任何帮助或建议将Apple IOS IPA文件缩小都会很棒

编辑
按照@Robotic Cat在评论中的建议进一步检查我发现Unix可执行文件是罪魁祸首......这绝对与delphi如何构建和链接包
结束编辑有关
在此输入图像描述

delphi ios firemonkey delphi-10-seattle

5
推荐指数
0
解决办法
432
查看次数

通过删除RTTI缩小exe

在这个问题(链接)中,据说下面的行(在每个单元中)将删除尽可能多的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 rtti

4
推荐指数
1
解决办法
1915
查看次数

Delphi XE2中的EXE大小太大

我在Delphi XE2中创建了一个简单的项目,只有3或4个delphi形式,大小只有8或9 KB.但如果我看到exe大小,它的12MB.我不知道怎么样?可能是什么原因?

delphi exe delphi-xe2

4
推荐指数
1
解决办法
8206
查看次数

德尔福应用程序将来会变得更小

已经delphi win32 exe的大小是~850 kb,他们有任何使exe大小更小的路线图,(我知道大小是因为vcl unicode RTTI等等),delphi编译整个单元甚至只有一个小功能这个单位是必需的.所以有任何设施,或第三方产品,(我知道kol和mck做同样的事情)

delphi size winapi

2
推荐指数
1
解决办法
690
查看次数