2010-10-20 69 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