如何减小我的Delphi DLL文件的大小?

8
我最近从Delphi 7迁移到Delphi XE3。
一个在Delphi 7中大小为107kb的dll文件现在编译为2.7MB。 另一个在Delphi 7中大小为114kb的dll文件现在编译为4.7MB!
这是正常的吗? 我应该怎么做才能减小文件大小? 如果您需要更多信息,请询问。
更新:
两个dll文件已经在发布模式下编译。
按照Mason的建议后:
4.7MB的文件被缩小到了834kb,而2.7MB的文件被缩小到了2.1MB。 2.1MB的文件使用了Generics和一个名为nExcel的外部库来生成Excel文件。虽然在文件大小较小时也使用了nExcel,但使用Generics是代码的新添加,我想这可能是文件大小仍然相当大的原因。

1
请务必以release模式编译您的dll,并使用{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])} {$WEAKLINKRTTI ON}从您的dll中删除扩展RTTI信息。 - RRUZ
http://andy.jgknet.de/blog/2011/11/xe2-why-have-empty-vcl-projects-a-size-of-7-mb/ - Arioch 'The
1个回答

16

其中有些是不可避免的;随着功能的增加,RTL变得越来越大。但是,很多大小增长都要归因于Delphi 2010中扩展RTTI的添加。

您可以通过在任何uses子句之前将以下两行代码放在主项目文件中来解决此问题:

{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}
{$WEAKLINKRTTI ON}

这将导致编译器在整个项目中最小化扩展运行时类型信息(RTTI)。 (请注意,这意味着您将无法使用RTTI功能。但由于这是Delphi 7项目,您可能还没有使用它。您需要了解扩展的RTTI并查看是否可以找到有用的用途。)


2
谢谢。RTTI,这是运行时类型信息吗?可能类似于C#中的反射吗? - Steve
2
不要忘记在release模式下编译dll,而不是在debug模式下编译。 在可执行文件中添加调试信息会显著增加其大小。 - Arnaud Bouchez
2
@MasonWheeler 你确定将这个放在主项目文件中就足够了吗?官方文档指出这是一个局部指令,我总是将其作为这样使用,通过将其插入到所有模块中调用的.inc文件中。 - Arnaud Bouchez
2
@Steve:如果这个方法有效,你能否在这里添加减小的DLL大小作为评论?这样其他人至少大致知道可以从这个调整中期望什么结果。谢谢。 - Kromster
1
@arnaud .dpr 文件的顶部就足够了。 - David Heffernan
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接