CLR 核心職責
CLR 是 .NET 執行引擎,管理記憶體、執行緒、程式碼執行、安全驗證、編譯等系統服務。所有受控代碼均運行於 CLR 之上,自動獲得以下功能。
1. 記憶體管理與垃圾回收 (GC)
- 自動配置/釋放物件記憶體,消除記憶體洩漏與無效指標引用兩大經典錯誤。
- 分代回收(Gen 0/1/2)、大型物件堆 (LOH)、並行/背景 GC 模式,平衡延遲與吞吐。
2. 程式碼存取安全性 (CAS)
- 依組件來源(網路、內網、本機)授予不同信任等級(FullTrust、LocalIntranet、Internet 等)。
- 同一應用程式中,不同組件可能擁有不同權限(如:檔案 IO、登錄存取、網路連線)。
- 範例:網頁內嵌元件可播放動畫,但無法讀取使用者個人檔案。
3. 型別安全與通用型別系統 (CTS)
- CTS 定義所有受控型別的統一規範(值型別/參考型別、介面、委派、泛型等)。
- 編譯器產生符合 CTS 的中繼資料,確保跨語言互通(C# 定義的類別可被 VB.NET/F# 直接繼承/呼叫)。
- 嚴格型別驗證防止緩衝區溢位、型別混淆等安全漏洞。
4. 即時編譯 (JIT)
- IL (Intermediate Language) 在執行時由 JIT 編譯為原生機器碼,不解釋執行。
- 針對執行環境(CPU 指令集、暫存器配置)優化,效能接近原生 C++。
- 記憶體管理器減少碎片、擴大引用局部性,進一步提升效能。
5. 語言互通與遷移支援
- 開發者可用慣用語言(C#、VB.NET、F#、C++/CLI 等)編寫,無縫使用他人用其他語言撰寫的組件。
- 既有非受控代碼(COM、Win32 DLL)可透過 P/Invoke、COM Interop、C++/CLI 互通,保護既有投資。
6. 伺服器端裝載支援
- CLR 可被高效能伺服器進程裝載:SQL Server (SQL CLR)、IIS (ASP.NET)。
- 在享受企業級伺服器可靠性/擴展性的同時,以受控代碼撰寫業務邏輯(預存程序、觸發器、Web API)。
結語
CLR 不只是執行引擎,更是記憶體安全、型別安全、語言中立、高效能、伺服器級可靠性的綜合基石。理解其機制,才能寫出高品質、高效能的 .NET 應用。