Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.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 xe禁用RTTI_Delphi_Rtti_Delphi Xe_Application Size - Fatal编程技术网

delphi xe禁用RTTI

delphi xe禁用RTTI,delphi,rtti,delphi-xe,application-size,Delphi,Rtti,Delphi Xe,Application Size,我最近使用了delphi xe,但由于rtti,exe的大小非常大(我想) 如何删除rtti,我可以使我的应用程序大小小到delphi 2009应用程序(490 kb)没有压缩;rtti的用途是什么?阅读 。。。以及: 请记住,$RTTI指令必须包含在每个应生效的单元中。简言之,请参见(splash答案中的链接提供了完整的故事): {$RTTI显式方法([])属性([])字段([])} 请注意,在此之前(XE5及以下),它可能在DPR文件中,并将应用于项目中的所有单元。我不认为是

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

如何删除rtti,我可以使我的应用程序大小小到delphi 2009应用程序(490 kb)没有压缩;rtti的用途是什么?阅读

。。。以及:

请记住,
$RTTI
指令必须包含在每个应生效的单元中。简言之,请参见(splash答案中的链接提供了完整的故事):

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


请注意,在此之前(XE5及以下),它可能在DPR文件中,并将应用于项目中的所有单元。

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

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

这是因为一些泛型功能已添加到sys单元中。 泛型是在2009年添加的,但在系统单元中,一些类在xe和xe2中用泛型重写。伊姆霍

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


(*)请注意,在此之前(XE4及以下),它可能在DPR文件中,并将适用于项目中的所有单元。

+1了解确切的声明,否则您需要通过挖掘文档来查找,因为它们主要用于如何使用它,而不是如何关闭它。您的RTTI声明,在D2010车型上使用时,会导致编译器错误:DCC致命错误:E2158系统单元过期或损坏:缺少TvisibilityClass。有什么建议吗?只有这一点:缺少“%25s”\u%28Delphi%29您正在尝试重新编译系统单元吗?也许你应该在这里问一个新问题——更多的人会这么看。为什么在DLL项目中默认不关闭这个选项?如果背景信息的链接没有性能差异+1,但如果您在回答中直接提供gabr现在所做的陈述,那就太好了。您的exe有多大?你期待什么?但我认为Unicode已经在Delphi 2009中(基本应用程序只有499 kb),但是Delphi xe vcl(Delphi xe应用程序大小为800 kb)没有大的改进,所以我认为额外的300 kb是大多数RTTI形式。d2007应用程序(没有unicode的应用程序约为350 kb),为什么您认为Delphi 2009中没有RTTI?@Eugene:如果unicode函数取代了ANSI函数,而不是添加了RTTI函数,您为什么认为这是unicode函数?每个人都在谈论的w.r.t.德尔福的“智能链接器”在哪里。。。如果它不能确定大部分代码是不必要的,那么它可能就没那么聪明了。@STATUS\u ACCESS\u DENIED Unicode函数并没有取代ANSI函数,而是扩展了它们。也就是说,对于某些函数,现在存在ANSI和Unicode变体。@Eugene:我们现在讨论的那些函数不只是运行时函数吗?如果在我的二进制文件中最终作为常量或静态数据的字符串是Unicode,那么为什么所谓的“智能链接器”不丢弃无用地占用二进制文件空间的函数呢?不过我明白你的意思。我认为Unicode的实现方式(并作为一种遗产继承下来)并不能让事情变得更好。
{$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([])}