標籤:基本類型 value 資料庫連接 堆棧 相互 封裝 系統資源 處理 sys
一、資料類型
C#中的資料類型分為實值型別 (Value type) 和參考型別(reference type),
值 類 型: 所有的實值型別都整合自 System.ValueType 上,除非加聲明?否則不可為null,儲存在 堆棧(Stack,先進後出)上,常見的實值型別有:整形、浮點型、bool、枚舉等。
參考型別:所有的參考型別都繼承自System.Object 上,參考型別儲存在 託管堆(Head,先進先出)上,常見的類型有:數組、字串、介面、委託、object等。
拆箱和裝箱:參考型別和實值型別的相互轉換叫做拆裝箱操作。
拆箱:拆箱就是將一個引用型對象轉換成任意值型!比如:
int i=0;System.Object obj=i;int j=(int)obj;
裝箱:裝箱就是隱式的將一個值型轉換為引用型對象。比如:
int i=0;Syste.Object obj=i;
二、記憶體回收機制 GC 1、簡介
C#中和Java一樣是一種系統自動回收釋放資源的語言,在C#環境中通過 GC(Garbage Collect)進行系統資源回收,在資料基本類型中介紹到,C#資料類型分為參考型別和實值型別,
實值型別儲存在Stack上,隨著函數的執行範圍執行完畢而自動出棧,所以這一類型的資源不是GC所關心 對象。GC記憶體回收主要是是指儲存在Heap上的資源。
.NET的GC機制有這樣兩個問題:
首先,GC並不是能釋放所有的資源。它不能自動釋放非託管資源。
第二,GC並不是即時性的,這將會造成系統效能上的瓶頸和不確定性。
GC並不是即時性的,這會造成系統效能上的瓶頸和不確定性。所以有了IDisposable介面,IDisposable介面定義了Dispose方法,這個方法用來供程式員顯式調用以釋放非託管資源。使用using語句可以簡化資源管理。
2、託管資源和非託管資源
上面介紹到,GC只釋放託管資源,那麼什麼是託管資源和費託管資源。
託管資源 : 託管資源指的是.NET可以自動進行回收的資源,主要是指託管堆上分配的記憶體資源。託管資源的回收工作是不需要人工幹預的,有.NET運行庫在合適調用記憶體回收行程進行回收。
非託管資源:非託管資源指的是.NET不知道如何回收的資源,最常見的一類非託管資源是封裝作業系統資源的對象,例如檔案,視窗,網路連接,資料庫連接,畫刷,表徵圖 等。這類資源,
記憶體回收行程在清理的時候會調用Object.Finalize()方法。預設情況下,方法是空的,對於非託管對象,需要在此方法中編寫回收非託管資源的代碼,以便記憶體回收行程正確回收資源。
總結:託管資源是釋放由GC來完成,釋放的時間吧不一定,一般是系統感覺記憶體吃緊,會進行緊急回收資源。一個對象想成為被回收,首先需要成為垃圾,GC是通過判斷對象及其子物件有沒有指向有效引用,
如果沒有GC就認為它是垃圾。記憶體回收機制通過一定的演算法得到哪些沒有被被引用、或者不再調用的資源,當這些垃圾達到一定的數量時,回啟動記憶體回收機制,GC回收實際上是調用了解構函式。
記憶體回收機制意味著你不需要擔心處理不再需要的對象了。咱們關心的主要是非託管資源的釋放。
3、非託管資源的釋放
在定義一個類時,可以使用兩種不同的機制類釋放非託管資源,這兩周機制有時候通常放在一起使用
1、聲明解構函式(終結器)嗎,作為類的成員
2、在類中實現 System.IDisposable 介面
public class AA { ~AA() { MessageBox.Show("解構函式被執行了"); } }
C#記憶體管理和記憶體回收機制