2009-12-19 76 views
0

我對我的項目windowservice做了一些修改。以前它是56kb。但修改後其大小減少到54kb。實際上修改增加了編碼的數量,爲什麼大小在減少,關於此功能的任何想法爲什麼我的編譯文件的大小減少了?

+0

沒有看到代碼,甚至是更改,都無法確定。 – Ken 2009-12-19 20:53:44

回答

0

如果您正在查看可執行文件的大小,那是因爲大小元信息已更改。

如果您正在尋找像TaskMgr一樣的內存大小,那很可能是因爲它運行時的歷史記錄有點不同。

+0

我的問題是爲什麼減小尺寸 – peter 2009-12-19 18:34:56

0

沒有必要mata信息。部分對齊可能會改變(當然這包括meta)。使用DUMPBIN命令檢查段大小,以比較新舊可執行文件。

它可以內聯優化。如果編譯器選擇這種方法對於內聯優化來說太大,它不會在每個調用位置複製代碼。這將減少文件大小。

VC使用512個字節來舍入可執行文件。因此,放下一個字符串可以減小512字節的文件大小(如果幸運的話)。

+0

我的問題是爲什麼減小尺寸 – peter 2009-12-19 18:34:13

2

C#代碼的行與爲其生成的IL之間沒有明顯的相關性。特別是匿名方法,lambda表達式,迭代器和Linq查詢在C#中可以非常緊湊,但會產生大量的IL。你必須使用ildasm.exe來達到它的底部。如果你真的想找出...

+0

我的問題是爲什麼減小尺寸 – peter 2009-12-19 18:33:31

+2

因爲您使用的那些昂貴的結構較少?我不知道,你忘了說你改變了什麼。 – 2009-12-19 18:35:17

+0

我發送一些屬性,其中包含一些具有安裝程序類的服務的字符串值,並可以在services.msc中看到另一個沒有安裝程序類並由另一個具有安裝程序類的服務器服務調用的窗口服務 – peter 2009-12-19 18:40:34

2

你在你的源代碼中所做的更改是根據其性質生成較小的機器代碼,或者編譯時選項可能已被更改。

或者,文件系統可以根據它佔用的塊數調整文件。

相關問題