Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi XE8控制台应用程序代码大小_Delphi_Delphi 2007_Delphi Xe8 - Fatal编程技术网

Delphi XE8控制台应用程序代码大小

Delphi XE8控制台应用程序代码大小,delphi,delphi-2007,delphi-xe8,Delphi,Delphi 2007,Delphi Xe8,我有一个小控制台应用程序,我在安装程序中使用它来设置注册表设置和日期。它只有80行代码,没有单元,全部在主程序文件中完成。它最初是在D2007中编译的,编译后的exe大小为84kB 我正在尝试以XE8 32位编译该文件,其编译大小为1MB 我预计新版本会有一些增长,但以任何标准衡量,12倍的增长都是非常糟糕的 它已在发布模式下编译,所有调试选项均已关闭 uses子句仅包括“registry、Windows、dateutils、SysUtils” 这是正常的还是我错过了一些要关闭的其他设置?问题在

我有一个小控制台应用程序,我在安装程序中使用它来设置注册表设置和日期。它只有80行代码,没有单元,全部在主程序文件中完成。它最初是在D2007中编译的,编译后的exe大小为84kB

我正在尝试以XE8 32位编译该文件,其编译大小为1MB

我预计新版本会有一些增长,但以任何标准衡量,12倍的增长都是非常糟糕的

它已在发布模式下编译,所有调试选项均已关闭

uses子句仅包括“registry、Windows、dateutils、SysUtils”


这是正常的还是我错过了一些要关闭的其他设置?

问题在您的使用列表中。您使用的是使用
System.Win.Registry
System.class
System.RTTI

(以下尺寸适用于XE4,但XE8不应太远)

仅使用
System.SysUtils
的空控制台应用程序的大小为122 KB。添加
System.RTTI
,您将得到962kb的内存

解决方案是取出使用过的RTL单元,将它们复制到项目文件夹中,并向它们添加
{$weakinkrti ON}
{$RTTI显式方法([])属性([])字段([])}


例如,对
System.RTTI
System.Classes
执行上述操作将把控制台大小减少到417KB。

并请显示一个MCVE。在当今这个时代,1Mb真的值得去或寻找一个解决方案来减少生成的可执行文件的大小吗?Andy,控制台应用程序没有什么区别。随着时间的推移,EXE的大小一直在增加,如果大小如此关键(或者使用KOL,如前面问题中提到的答案之一),那么除了坚持使用旧版本之外,你真的没有什么可以做的了。正如@Craig提到的,当XE8的ISO下载超过7GB时,安装实用程序中1MB大小的差异真的有意义吗?@DalijaPrasnikar给出的场景是80行代码。因此,这些担忧并不那么重要。询问者可以决定如何进行。有人想知道为什么一个安装程序不是很诚实。