日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.Net之美读书笔记17

發布時間:2024/4/17 asp.net 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .Net之美读书笔记17 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

.Net垃圾回收

垃圾回收:指的是CLR對托管堆的垃圾內存進行回收,由CLR自動處理,這里簡單說下垃圾回收的機制。

引用類型的內存分布

我們知道引用對象分配在托管堆上,我們新建一個Person對象來分析下新建的過程。

  • 聲明一個Person類型變量(在棧stack上分配一變量)
  • new 在托管堆heap上創建對象實例
  • 將對象實例地址賦值給棧stack的變量
  • public class Person:IDisposable{public string ID { get; set; }public string Name { get; set; }public string Gender { get; set; }public DateTime Birthday { get; set; }public virtual void Study(){Console.WriteLine("I am a person.I must study!");}public void Dispose(){Console.WriteLine("Running Dispose");}~Person(){Console.WriteLine("Running Destructor");}} static void Main(string[] args){Person p1;p1 = new Person();Console.ReadKey();}

    回收的垃圾

    有了引用對象的理解,我們在理解要回收的垃圾是什么?

    • 要回收的垃圾:棧上不存在變量指向的托管堆對象,在進行垃圾回收時回收
    • 什么時候發生垃圾回收: 當托管堆(Heap)的空間不足時或應用程序關閉時
    • 怎樣回收: 將垃圾對象托管堆內存收回,并將非垃圾對象內存壓縮(避免內存碎片化)

      析構函數與IDisposable模式

      上面所說的垃圾回收都是發生在托管堆Heap上的,那么非托管資源怎么回收呀?抱歉這個這個只有自己代碼回收(像C++那樣)。這種情況一般出現在引用的類庫對象中涉及非托管資源(如:數據庫處理對象SqlConnection或流處理對象Stream),其實類庫也給提供了具體的回收方法,在回收時調用。

      析構函數

      析構函數就是為處理垃圾回收時對非托管資源的釋放問題?GC在進行垃圾回收時,如果實例存在析構函數,會先執行析構函數然后再垃圾回收。
    Person p1;p1 = new Person();Console.ReadKey();p1 = null;//代碼強制GC垃圾回收//會執行Person 的析構函數GC.Collect();

    IDisposable模式

    有時對象使用完,就需要將所關聯資源文件釋放掉,這里引出了IDisposable模式 ,實現IDisposable接口

    //會調用對象的Dispose()方法釋放資源using (Person p = new Person()){p.Study();}

    轉載于:https://www.cnblogs.com/LoveTomato/p/8136127.html

    總結

    以上是生活随笔為你收集整理的.Net之美读书笔记17的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。