CLR 核心優勢
- 跨語言整合與例外處理
- 自動記憶體管理(GC)
- 強化安全性(CAS)
- 版本控制與並存執行
- 簡化元件互通模型
可管理程式碼
針對 CLR 編譯的程式碼稱為可管理程式碼,享有上述服務。編譯器需產生中繼資料(型別、成員、參考資訊),與 IL 碼共同封裝在 PE 檔中。
執行流程
- 原始碼 → 編譯器 → IL (MSIL) + 中繼資料
- 執行時 → JIT 編譯器 將 IL 轉為原生機器碼
- CLR 載入類別、配置物件、解析方法呼叫、強制安全性
自動記憶體管理:垃圾收集器 (GC)
- 所有物件配置於受控堆疊。
- 採用代機制:第 0 代(新物件)、第 1 代、第 2 代(長壽物件)。
- 回收觸發:堆疊空間不足 → GC 掃描特定代 → 標記-壓縮 → 釋放記憶體。
- 消除記憶體洩漏、野指標、雙重釋放等經典錯誤。
JIT 編譯器三種模式
| 編譯器 | 特性 |
| Standard JIT (預設) | 執行時編譯、資料流分析、最佳化 |
| PreJIT (Ngen) | 安裝時預先編譯全組件,啟動較快 |
| EconoJIT | 低最佳化、編譯極快、適用資源受限裝置 |
管理工具:jitman.exe
版本控制與部署
- 組件 = 部署單元(類型 + 資源 + IL + 中繼資料)。
- 私有組件:僅供單一應用程式使用,複製即部署(XCOPY)。
- 共用組件:強式名稱、GAC、版本策略、發行者原則。
- 解決「DLL Hell」:中繼資料內建相依版本、並存執行、隔離儲存。
安全性模型
- 程式碼存取安全 (CAS):依據證據(區域、強式名稱、簽署)授予權限集。
- 角色型安全:Windows 身分識別整合。
- 預設:網路下載程式碼受限(不可存取本機檔案/登錄表)。