首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 銳利體驗 (三) (1):.NET 平台架構與 CLR 核心機制

     編輯:關於C語言

第三講:Microsoft .NET 平台基礎架構

脫離 .NET 平台談 C# 毫無意義,C# 之「銳利」正源於其強大後端平台。單純著重語法層面無法體驗 C# 銳利之處,C# 程式許多奧妙必須仰賴 .NET 平台深度掌握運用。簡單說,.NET 平台建立在開放網際網路協定與標準之上,採用新工具與服務滿足計算與通訊需求的革命性 XML Web 智慧運算服務平台,讓應用程式在網際網路便捷互通,不受作業系統與程式語言限制。

技術層面核心:CLR 與框架類別庫

.NET 平台主要包含兩大核心:通用語言執行平台 (CLR) 與 .NET 框架類別庫,為平台實現提供底層技術支撐。CLR 位於作業系統最底層,為 .NET 平台執行引擎。框架類別庫提供可被任何程式語言使用的類別庫,讓程式設計師更容易建立網路應用與服務。之上為多種應用程式模板,為開發網路應用與服務提供高階元件與服務。

通用語言執行平台 (CLR)

CLR 是整個 .NET 框架賴以建構的基礎,為 .NET 應用程式提供受控代碼執行環境。實際上是駐留記憶體的代理代碼,負責應用程式整個執行期間的代碼管理:記憶體管理、執行緒管理、安全性管理、遠端管理、即時編譯 (JIT)、代碼強制安全型別檢查等——可稱 .NET 框架生命線。

CLR 代理了部分傳統作業系統管理功能。CLR 下代碼稱「受控代碼」,否則為「非受控代碼」。CLR 亦可視為技術規範:任何語言編寫,只要能編譯成 Microsoft 中介語言 (MSIL),即可在其支援下執行,實現語言獨立性。目前支援 CLR 語言達二十餘種。MSIL 為 .NET 平台編譯器輸出 PE 檔案語言,最完整語言集,類似 PC 組合語言。JIT 編譯器在執行時將 MSIL 編譯成本機二進制代碼,提供多語言底層技術支援。另提供經濟型 JIT 與安裝時編譯技術。

CLR 設計目的:元件導向程式設計一流支援

如 Windows 直接支援視窗、控制項、圖形、選單為訊息導向程式設計添加底層結構,CLR 直接支援元件(含屬性與事件)、物件、繼承、多型、介面。屬性與事件直接支援讓元件程式設計更簡單,無需特殊介面與配接器設計模式。元件執行時,CLR 管理記憶體配置、啟動/中止執行緒與進程、強化安全性,並調整相關元件附屬配置。序列化支援多種格式操作磁碟元件,含基於 XML 標準的 SOAP。CLR 提供強力協調錯誤處理方式。每個模組具完整內建中繼資料,讓動態建立與方法呼叫更容易、更安全。反映允許靈活建立與執行代碼。可控制應用程式使用元件版本,提高可靠性。元件代碼為與處理器無關、易驗證的中介語言 (IL),非特定機器語言,意謂元件不僅可跨多種電腦執行,且確保不會覆蓋未使用記憶體、不會導致系統崩潰。CLR 依受控元件來源(網際網路、企業區網、本機)判定適當信任度,限定執行讀取檔案、修改登錄等敏感操作權限。通用型別系統 (CTS) 嚴格型別安全檢查避免元件間型別不匹配。CLR 程式設計完全圍繞元件進行。

CLR 通常寄宿於高效能伺服器應用程式(IIS、SQL Server),讓我們充分利用其安全、高效優勢部署商業邏輯。

記憶體管理與垃圾收集

CLR 對程式設計師影響最大的是記憶體管理功能,提供高效能垃圾收集環境。垃圾收集器自動追蹤應用程式操作物件,程式設計師不再需處理複雜記憶體管理。雖自動化記憶體管理無法媲美特定程式量身訂製的手工管理,但現代軟體業動輒成千上萬行代碼,大量商業邏輯凸顯的是可管理性、可維護性的工程代碼。.NET/C# 非為「作坊高手」準備,C 語言才是他們最愛。

在受控環境下,CLR 負責物件記憶體配置、管理物件參考、釋放不再使用記憶體(自動垃圾收集)。從根本解決長期困擾軟體的記憶體洩漏與無效記憶體參考問題,大幅減輕開發負擔,提高程式健壯性。受控環境根本找不到記憶體操作或釋放語言指令。.NET 應用程式可使用受控資料與非受控資料,但 CLR 無法判斷兩者。

垃圾收集器運作機制

  • 使用 new 建立新物件時,在受控堆積配置記憶體。
  • 受控堆積空間足夠時,為每個新物件配置記憶體。
  • 應用程式不再持有物件參考時,垃圾收集器偵測並釋放該物件。
  • 非立即釋放,依演算法決定收集時機與對象。
  • 受控堆積記憶體不足時,啟動收集執行緒釋放系統記憶體。
  • 依物件存活時間、經歷收集次數決定釋放對象。
  • 巨觀上無法預知確切行為,但 .NET 類別庫提供部分控制垃圾收集行為功能,特殊情況下可進行受限操作。

非受控資源仍需手動釋放

垃圾收集器不意味著程式設計師一勞永逸。操作包裝檔案、網路連線、Windows 控制代碼、點陣圖等底層作業系統資源的物件時,仍需明確釋放非受控資源。詳細闡述見「第五講:建構函式與解構函式」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved