2010-03-26 83 views
0

由於某種原因,我的dll已經比早期大了很多倍。我正在開始規劃這種情況:如何再次減小dll的大小

  1. 來源未發生變化。
  2. 調試信息無處不在。
  3. Dll使用軟件包「軟件包」,但不包含在運行時軟件包選項中。
  4. 我比較了新的DLL與舊版本的DLL認爲PE探索的工具。在新的DLL中,我發現很多模塊的前綴'ec'隱式地導入,不像老的dll。
  5. 使用ecControls組件打包「Pack」
  6. Dll不使用顯式調用ecControls單位。

爲什麼在dll中導入ecControls單元?有沒有人提供一些建議?

+0

如果源文件沒有改變,那麼爲什麼要重建dll的原因? – skamradt 2010-03-26 17:50:55

+0

DLL的來源,但包「包」的來源可能chahged。 – 2010-03-26 18:06:02

回答

1

如果您的DLL使用的是未包含在運行時軟件包列表中的軟件包,則其單元將隱式地導入到您的DLL中,而不是鏈接到運行時軟件包。這可能是什麼原因造成的。嘗試將軟件包添加到運行時軟件包列表中,並查看ecControls問題是否消失。

2

如果意外地使用了ecControls中的一個單元,它將會調用它的初始化部分(如果它有一個),並且可以在其中放置一個斷點以嘗試查看它從哪裏調用。您也可以在System.InitUnits中放置一個斷點(debug dcus on),以查看ecControls中的任何單元是否正在初始化。

我在Forms.pas中使用這種技術時,在dll上工作以確保Forms.pas不會意外鏈接。

+0

真棒小費。初始化部分經常被忽略,我從來沒有想過如何利用它。 – 2010-03-26 20:27:20

1

爲什麼你不只是重命名ecControls目錄並重建(當然首先刪除包)? 這將讓你確切地看到它被引用的地方。