2010-08-02 73 views
3

有更多的DLL依賴關係或更好的靜態鏈接儘可能最好?是否有一個帶有很多DLL的應用程序是不好的做法?

謝謝

+0

有多少dll可能會發生變化,以及您裝運了多少dll? – 2010-08-02 23:49:50

+0

不知道,如果它的好或壞的做法,還是取決於它如何影響應用程序。但我肯定會發現它看起來更清晰,只能看到一個.exe文件。 – mingos 2010-08-02 23:51:44

回答

8

不,這是不錯的做法,運送大量的DLL;但是,將它們放在%System32%中是不好的做法。實際上,使用DLL代替靜態鏈接通常是很好的做法;一方面,您可以輕鬆地更換需要更新的DLL,而不必更換整個二進制文件,而另一方面,如果您的程序最終需要多個可執行文件一起工作,那麼您只需支付一份DLL代碼(而使用靜態鏈接,則最終會複製常見的代碼)。

+0

爲多個可執行文件+1。 – 2010-08-03 11:53:33

+0

您只需支付磁盤上DLL的一個副本;在RAM中,它是按可執行文件複製的。 – Ioan 2010-08-04 17:53:48

+0

很難確保您只有一個DLL副本,如果有其他應用程序使用例如Qt.dll,除非他們將它們放入系統中,否則您的應用程序無法找到它們。你通常可以做的最好的事情就是在你的公司 – 2010-08-04 18:05:05

0

擁有靜態鏈接可爲您的應用程序提供大量內存空間,因此,從該POV開始,DLL會更好,即只加載所需內容。現在,安裝通常由安裝程序完成,因此如果您有很多DLL,則無關緊要。

0

我認爲這不是一個壞習慣。看看Office或Adobe或任何大型應用程序。他們最終得到了很多DLL - 因爲他們不得不將所有東西都打包成一個100M + EXE文件。

當你不是絕對需要它們時,將事情分解成DLL。

+2

我不反對你。但我不一定會把Office或Adobe視爲優秀軟件工程的例子。或者任何已經存在多年和多個版本的應用程序。有很多事情只是歷史事故,這些事故的價格變化太大,或者由於成百上千的開發人員在使用同一種產品。 – KeithB 2010-08-03 12:40:52

+0

@KithithB:我不知道。我想任何大規模的應用程序都需要分解爲動態加載的組件 - 否則如果用戶不訪問某些功能,則會付出浪費的性能代價。 Web應用程序在單獨的腳本文件中執遊戲通過資源文件來做到這一點(遊戲主要是內容;一些遊戲將所有內容都包裝在一個大文件中,但是它們會加載它的零食,同樣的原則隱藏在優化技巧後面);等 – kizzx2 2010-08-03 13:35:43

+1

我不同意有多個DLL。我只是說「辦公室做它,所以它一定是個好主意」並不是一個有說服力的論點。 – KeithB 2010-08-03 16:43:26

0

一般來說這不是一個壞習慣。最好將程序的代碼拆分爲獨立的動態庫,特別是如果所提供的功能是從多個可執行文件中使用的話。 這並不意味着每個程序都應該在更多動態庫中分割代碼;對於簡單的實用程序,這可能不需要。

0

正如其他人所說,很多DLL並不是一個壞習慣。把一些想法放在每一箇中。我喜歡儘可能將DLL保持爲「小島嶼式」。如果這些將分發,我喜歡有一個特定的命名約定,反映產品和/或公司名稱和/或某種類型的首字母。

0

只是想從其他程序添加另一個觀察使用許多動態加載的DLL。例如,GIMP及其插件。加載DLL的方式會影響客戶感知的應用程序速度,如果這是其他非常好的(更新,重用等)因素。我確信操作系統需要一些開銷來加載DLL,並且你可能會遇到進程限制(比如打開文件句柄)。擁有非常多的非常小的DLL可能不如「比那個」大的那個「更小」的DLL數量大。

相關問題