10

我最近使用了delphi xe,但是由于rtti,exe的大小非常大(我认为)

如何删除 rtti,我可以在不压缩的情况下使我的应用程序大小与 delphi 2009 应用程序(490 kb)一样小吗?rtti有什么用

4

5 回答 5

17

简而言之(由飞溅答案中的链接提供的完整故事):

{$RTTI 显式方法([]) 属性([]) 字段([])}

请注意,从 XE6 和更高版本开始,这需要在您要禁用 RTTI 的每个单独单元中。在此之前(XE5 及以下)它可能位于 DPR 文件中,并适用于项目中的所有单元。

于 2010-10-20T06:48:36.033 回答
8

阅读Delphi 的在线帮助...

...并搜索堆栈溢出

请记住,该$RTTI指令必须包含在它应该生效的每个单元中。请参阅如何为整个项目设置 $RTTI 指令?

于 2010-10-20T06:40:45.500 回答
7

您的问题与 RTTI 无关。如果您谈论的是相对较小的增加(100-200K),这是由于 RTL 中的额外功能(为 Unicode 支持等而添加的)。如果您增加了 500-700K 左右,那么请检查您是否链接了 VCL UI 单元(表单、控件等)。如果您增加了 3Mb,那么您已经打开了额外的调试符号。

于 2010-10-20T08:12:47.100 回答
4

这是因为一些泛型功能已添加到 sys 单元中。2009 年添加了泛型,但在系统单元中,一些类在 xe 和 xe2 中用泛型重写。恕我直言

添加此标志以将dpr 文件(项目 > 查看源代码)中的大小减小到每个单独的单元(从 XE5 开始)*。

{$SETPEFlAGS IMAGE_FILE_DEBUG_STRIPPED or IMAGE_FILE_LINE_NUMS_STRIPPED or
 IMAGE_FILE_LOCAL_SYMS_STRIPPED OR IMAGE_FILE_RELOCS_STRIPPED}

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

(*) 请注意,从 XE5 和更高版本开始,这需要在您要禁用 RTTI 的每个单独单元中。在此之前(XE4 及以下),它可能位于 DPR 文件中,并适用于项目中的所有单元。

于 2012-07-19T18:06:24.630 回答
3

我不认为是 RTTI 为您的应用程序增加了如此多的大小开销。你怎么知道它是?

于 2010-10-20T07:46:38.293 回答