C#學習系列-.NET體系結構

原文: C#學習系列-.NET體系結構

.NET框架概述 html

.NET 框架爲.NET應用程序運行提供虛擬機環境,爲.NET應用程序提供編譯、運行、內存管理、垃圾回收、安全等服務。 編程

 

.NET框架組成部分 緩存

1.公共語言運行時(Common Language Runtime,CLR) 安全

2.NET框架類庫(並不是.NET框架中的全部類庫代碼都是純粹的託管代碼編寫的,.NET框架中有至關數量的類是對Win32 API的封裝) 框架

 

託管代碼 編程語言

使用.NET公共語言運行時提供的代碼,反之爲非託管代碼(如 Win32 API) 工具

 

通用語言組織框架(CLI Common Language Infrastructure) post

規定如何在運行庫中聲明、使用和管理類型,同時也是運行庫支持跨語言互操做的一個重要組成部分 性能

1.創建一個支持跨語言集成、類型安全和高性能代碼執行的框架 學習

2.提供一個支持完整實現多種編程語言的面向對象模型

3.定義各個語言必須遵照的規則,有助於確保用不一樣語言編寫的對象可以交互做用

 

公共語言運行時(CLR)

負責管理.NET應用程序編譯、運行、代碼類型安全檢查、內存分配、線程管理、安全、垃圾回收等服務,爲.NET應用程序提供一個虛擬的運行環境

 

通用類型系統(CTS Common Type System)

CTS定義了一個類型庫,不管是VB仍是C#,他們的數據類型都是一致的,所以.NET將各類不一樣的編程語言的數據類型進行抽象,就誕生了CTS。

CTS類型主要分爲:值類型和引用類型 http://wenku.baidu.com/link?url=LHBzlpJ8zHnLvsNzcmGxjpGgOolfq721gDvoVTY7gtNHTUbmhf_Zv8z0GliZECRuyg020kqZhZEtWVawStyqJZGxAFoDSMvva411vNACau7

 

公共語言規範(CLS Common Language Specification)

CLS是CTS的子集,目標是讓.NET平臺上用不一樣的編程語言編寫的對象之間能夠互相調用

 

CTS、CLR、CLS 三者關係以下:

 

值類型:存儲在內存的堆棧中,快速訪問,超出做用範圍自動釋放內存,垃圾回收機制不參與回收。

引用類型:分配在內存中,默認NULL ,在棧中分配內存的地址,操做時經過指針尋找,經過垃圾回收機制回收。將一個引用類型變量的內容賦值給另外一個引用類型的變量時,只是變量的內存地址被拷貝。

 

裝箱:將值類型轉換成引用類型 int i=0; object o=i;

拆箱:將引用類型轉換爲值類型 int i=0;object o=i;int j=(int)o;

裝箱和拆箱對性能損耗是有影響的。

 

即時編譯(JIT)

  1. 在編譯期:CLR對C#代碼進行一次編譯,生成中間代碼DLL或者EXE。
  2. 在運行期,CLR根據硬件環境使用JIT(即時編譯引擎),將中間代碼編譯爲二進制代碼並執行。
  3. 編譯好的二進制代碼被存放到一個緩存區緩存,下次調用相同的代碼就直接從緩存區中調用,也就是說相同的代碼只會編譯一次。

     

NGEN(本機映像生成器)編譯

本機映像生成器(Ngen.exe)是一個提升託管應用程序性能的工具。Ngen.exe建立本機映像(包含經編譯的特定於處理器的機器代碼的文件),並將它們安裝到本地計算機上的本機映像緩存中。運行庫可從緩存中使用本機映像,而不是使用實時編譯器編譯原始程序集。

 

中間語言(MSIL 如今稱爲CIL Common Intermediate Language)

 

參考《C#4.0權威指南》

相關文章
相關標籤/搜索