2010-10-20 62 views
9

我必须用delphi XE最近却exe文件的大小是非常大的,因为RTTI的(我认为)德尔福XE禁用RT​​TI

HOWTO除去RTTI,我可以让我的应用程序的大小小的Delphi 2009的应用程序(490 KB )没有comprssion;什么是使用RTTI的

+2

你的exe有多大?你能指望什么? – Harriv

回答

14

在短(通过链接在飞溅的答案提供完整的故事):

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

注意as of XE5 and newer, this needs to be in each individual unit for which you want to disable RTTI.在此之前(XE4及以下)它可能在DPR文件中并适用于项目中的所有单元。

+0

+1对于确切的声明,您需要通过挖掘文档来找到它们,因为它们主要针对如何使用它,而不是如何关闭它。 –

+0

有没有任何性能优势,因为RTTI – VibeeshanRC

+1

@ Vibeeshan:不,只是代码大小的差异。 – gabr

4

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

6

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

+0

但我认为Unicode已经在德尔福2009年(基本应用程序只有499 kb),但德尔福xe vcl(delphi xe应用程序大小800 kb)没有大的改进,所以ithink额外的300 kb是最RTTI格式。和d2007应用程序(没有unicode是〜350 kb) – VibeeshanRC

+0

您为什么认为RTTI在Delphi 2009中不存在? –

+0

@Eugene:为什么你认为它是Unicode函数,如果Unicode函数_replaced_ ANSI的,而不是被添加?每个人都在谈论w.r.t的“智能链接器”在哪里?德尔福? ......如果不能确定大部分代码是不必要的,那毕竟可能并不那么聪明。 – 0xC0000022L

3

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

添加此标志以缩小尺寸在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([])} 

(*)注意as of XE5 and newer, this needs to be in each individual unit for which you want to disable RTTI.在此之前(XE4及以下)可能是在DPR文件,并会应用到项目中的所有单位。

+0

第一条指令不起作用 – Oussaki