從靜態鏈接的記憶體浪費,到動態鏈接的共享優雅,DLL 經歷了軟體工程的關鍵演進。.NET 組件模型繼承並超越了傳統 DLL,帶來了版本隔離、語言中立、安全邊界等革命性優勢。
| 特性 | 靜態鏈接 | 動態鏈接 |
|---|---|---|
| 程式碼副本 | 每個 EXE 獨佔一份 | 記憶體中僅一份,多進程共享 |
| 更新部署 | 需重新編譯所有 EXE | 替換 DLL 即可,無需觸動 EXE |
| 記憶體佔用 | 隨進程數線性增長 | 常駐共享,卸載自動釋放 |
| 啟動速度 | 快(無解析延遲) | 稍慢(載入器解析匯入表) |
Msvcrt.dll、Mfc42.dll 由所有 MFC 應用共享kernel32.dll、user32.dll、gdi32.dll 等internal 實現組件級封裝衛星組件模式:主組件含中性文化資源,各語言獨立 .resources.dll 部署於子目錄(zh-TW/、en-US/),ResourceManager 自動依 CurrentUICulture 載入匹配資源,主程式零修改實現全球化。
Assembly.Load + 反射動態發現擴充點.NET 組件模型不只是 DLL 的改良版,更是元件導向程式設計規範的標準實現,奠定了現代 .NET 生態系統的基石。