C#記憶體管理和記憶體回收機制

來源:互聯網
上載者:User

標籤:基本類型   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#記憶體管理和記憶體回收機制

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.