.NET體系結構

主要內容包括:算法

C#與.NET的關係、公共語言運行庫、中間語言、程序集、.NET Framework類、名稱空間、內層管理...數據庫

C#與.NET的關係

C#是門高級編程語言,.NET(Framework)是個環境,用C#編寫的全部代碼老是在.NET Framework中運行。編程

CLR公共語言運行庫

 它是.NET Framework的核心,在CLR控制下運行的代碼稱爲託管代碼。CLR執行編寫好的源代碼以前,須要編譯它。windows

編譯分兩個階段:設計模式

1)將源代碼編譯爲Microsoft中間語言(IL)安全

2)CLR把IL編譯爲平臺專用代碼。網絡

這種設計的重要優勢:編程語言

1)平臺無關性,依託的是:CTS是通用類型系統,CLS是通用語言規範,函數

2)提升性能性能

3)語言的互操做性,COM、windows運行庫

中間語言

應用程序域

就是爲安全性,可靠性,隔離性,和版本控制,及卸載程序提供的隔離邊界。它一般由運行庫宿主建立,應用程序域提供了一個更安全,用途更廣的處理單元。

程序集

程序集是.NET時代的動態連接庫DLL,程序集是包含編譯好的、面向.NET Framework的代碼的邏輯單元。

程序集包括(中間語言(IL),元數據(metaData),資源(resource),裝配清單(AL))。

它包含的元數據(描述自身的數據)描述了對應代碼中定義的類型和方法。

能夠編程訪問這些元數據,這個技術稱爲「反射」。抽象工廠設計模式中有用到:

static string AssemblyName = Assembly.GetExecutingAssembly().GetName().Name; //獲取程序集名稱
string className = AssemblyName+".Models" + "." + db + "User";   //命名空間.類名稱
(IUser)Assembly.Load(AssemblyName).CreateInstance(className);    //獲取IUser程序集

可執行代碼和庫代碼,使用相同的程序集結構,他們的區別是:

可執行代碼的程序集包含一個主程序的入口點,而庫程序集不包含。

.NET Framework類

屬於託管類,使用託管代碼的好處是可使用.NET基類庫,很是多的類的集合。大部分.net基類庫是用C#寫的。

名稱(命名)空間

是.NET避免類名衝突的一種方式。

Microsoft建議都至少要提供兩個嵌套的命名空間名,第一個是公司名,第二個是技術名稱或者軟件包的名稱,再以後是類名。

內存管理

一、GC(Garbage collector)

GC是垃圾收集器。CLR經過GC實現的自動內存管理。

1)什麼被認爲是可回收的對象?
GC採用必定的算法遍歷全部的對象,找出可達對象和不可達對象,不可達對象是可回收的對象。
2)何時回收?
一般狀況下:內存不足溢出時,確切的說,是第一代對象已滿的時候。
3)如何回收?
垃圾收集進程來釋放不可達對象的內存空間。
4)回收完後,還須要作什麼?
避免託管堆上的內存碎片,從新分配內存,壓縮託管堆。
5)避免垃圾回收帶來的性能影響,採用代齡機制。

如要請求垃圾收集,能夠調用下面的方法之一: 
System.gc()
Runtime.getRuntime().gc()

二、託管資源vs非託管資源

資源就是程序中可利用的數據,譬如:字符串、圖片和任何二進制數據,包括任何類型的文件。

託管資源是由CLR全權負責的資源,CLR不負責的資源位非託管資源。
對於託管資源經過GC自動清理回收。對於非託管資源,經過代碼調用手動進行清除,再由GC回收
如何正確的釋放資源:對於非託管的資源,通常就是,Stream(流),數據庫的鏈接,網絡鏈接等的這些操做系統資源,須要咱們手動去釋放。

Net提供了三種釋放方法:Dispose,Close,析構函數(也就是Finalize方法)

相關文章
相關標籤/搜索