亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C#清理非托管對(duì)象實(shí)例分析

 更新時(shí)間:2016年02月29日 09:34:52   作者:Microblue  
這篇文章主要介紹了C#清理非托管對(duì)象的方法,結(jié)合實(shí)例形式詳細(xì)分析了C#清理非托管對(duì)象釋放資源的相關(guān)原理與實(shí)現(xiàn)技巧,需要的朋友可以參考下

本文實(shí)例講述了C#清理非托管對(duì)象的方法。分享給大家供大家參考,具體如下:

Finalize方式在.net內(nèi)部是如何實(shí)現(xiàn)的呢?

當(dāng)GC(垃圾回收器)開(kāi)始工作的時(shí)候,它首先將沒(méi)有終結(jié)器的垃圾對(duì)象從內(nèi)存中移除,有終結(jié)器的所有對(duì)象則添加到一個(gè)終止化隊(duì)列當(dāng)中。GC會(huì)調(diào)用一個(gè) 新線程來(lái)執(zhí)行這些對(duì)象的終結(jié)器。當(dāng)終結(jié)器執(zhí)行完畢后,這些對(duì)象會(huì)從隊(duì)列中被移除。這時(shí)候由于這些對(duì)象在第一次檢測(cè)到的時(shí)候沒(méi)有被釋放,它們將會(huì)進(jìn)入第1代 對(duì)象,直到GC檢測(cè)到第0代對(duì)象和第1代對(duì)象再次充滿(mǎn)時(shí),這時(shí)候GC才會(huì)把剛才那些對(duì)象釋放掉,所以有終結(jié)器的對(duì)象會(huì)比沒(méi)有的在內(nèi)存中保留更長(zhǎng)的時(shí)間。

提示:垃圾回收器把托管堆中的對(duì)象分為3代,分別是0,1,2.一般分配為:0代約256K,1代約是2MB,第2代約是MB,代齡越高,容量就越 大,顯然效率也就越低.首先被添加到托管堆中的對(duì)象被定為第0代,當(dāng)?shù)?代充滿(mǎn)時(shí),就會(huì)執(zhí)行垃圾回收,未被回收的對(duì)象代領(lǐng)將提升1代.

由于以上原因應(yīng)該避免僅使用Finalize方式釋放非托管資源.

Dispose模式:在自定義類(lèi)中實(shí)現(xiàn)IDispose接口,在接口中的Dispose方法中對(duì)非托管資源進(jìn)行釋放.閑話少說(shuō),上代碼

public class MyResourceRelease: IDisposable
{
  /// 保證資源只用釋放一次
  private bool _alreadyDisposed = false;
  /// 用來(lái)判斷釋放資源的類(lèi)別(托管和非托管)
  protected virtual void Dispose(bool isDisposing)
  {
    if(_alreadyDisposed)
    {
      return;
    }
    if(isDisposing)
    {
      //釋放托管資源
    }
    //釋放非托管資源
    _alreadyDisposed = true;
  } 
  public void Dispose()
  {
    Dispose(true);
  }
}

上面的代碼就是用Dispose方式釋放資源的方法.因?yàn)樯厦孀远x的Dispose(bool isDisposing)方法是virtual的,所以還可以在派生類(lèi)里面對(duì)它進(jìn)行override

public class MyDerivedResource: MyResourceRelease
{
  private bool _disposed = false;
  protected override void Dispose(bool isDisposing)
  {
    if(_disposed)
    {
      return;
    }
    try
    {  
      if(isDisposing)
      {
       //釋放托管資源
      }
      //釋放非托管資源
      _disposed = true;
     }
     finally
     {
     base.Dispose(isDisposing);
     }
  }
}

這樣可以確保釋放繼承鏈上所有對(duì)象的引用資源,在整個(gè)繼承層次中傳播Dispose模式

更多關(guān)于C#相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《C#數(shù)據(jù)結(jié)構(gòu)與算法教程》、《C#常見(jiàn)控件用法教程》、《C#面向?qū)ο蟪绦蛟O(shè)計(jì)入門(mén)教程》及《C#程序設(shè)計(jì)之線程使用技巧總結(jié)

希望本文所述對(duì)大家C#程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 基于WPF實(shí)現(xiàn)經(jīng)典紙牌游戲

    基于WPF實(shí)現(xiàn)經(jīng)典紙牌游戲

    這篇文章主要為大家詳細(xì)介紹了如何溧陽(yáng)WPF實(shí)現(xiàn)經(jīng)典紙牌游戲,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)WPF有一定的幫助,需要的可以參考一下
    2023-02-02
  • unity shader實(shí)現(xiàn)玻璃折射效果

    unity shader實(shí)現(xiàn)玻璃折射效果

    這篇文章主要為大家詳細(xì)介紹了unity shader實(shí)現(xiàn)玻璃折射效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C# 基于udp廣播收集局域網(wǎng)類(lèi)所有設(shè)備信息

    C# 基于udp廣播收集局域網(wǎng)類(lèi)所有設(shè)備信息

    這篇文章主要介紹了C# 基于udp廣播收集局域網(wǎng)類(lèi)所有設(shè)備信息的方法,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-12-12
  • 高效C#編碼優(yōu)化原則

    高效C#編碼優(yōu)化原則

    這篇文章主要介紹了高效C#編碼優(yōu)化原則,非常實(shí)用,需要的朋友可以參考下
    2014-08-08
  • .net(c#)中的new關(guān)鍵字詳細(xì)介紹

    .net(c#)中的new關(guān)鍵字詳細(xì)介紹

    在 C# 中,new 關(guān)鍵字可用作運(yùn)算符、修飾符或約束
    2013-10-10
  • C#中調(diào)用MySQL存儲(chǔ)過(guò)程的方法

    C#中調(diào)用MySQL存儲(chǔ)過(guò)程的方法

    這篇文章主要介紹了C#中調(diào)用MySQL存儲(chǔ)過(guò)程的方法,涉及C#數(shù)據(jù)庫(kù)操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • 利用C#編寫(xiě)Linux守護(hù)進(jìn)程實(shí)例代碼

    利用C#編寫(xiě)Linux守護(hù)進(jìn)程實(shí)例代碼

    如今的編程是一場(chǎng)程序員和上帝的競(jìng)賽,程序員要開(kāi)發(fā)出更大更好、傻瓜都會(huì)用到軟件,下面這篇文章主要給大家介紹了關(guān)于利用C#編寫(xiě)Linux守護(hù)進(jìn)程的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。
    2018-01-01
  • 使用C#來(lái)編寫(xiě)一個(gè)異步的Socket服務(wù)器

    使用C#來(lái)編寫(xiě)一個(gè)異步的Socket服務(wù)器

    這篇文章主要介紹了使用C#來(lái)編寫(xiě)一個(gè)異步的Socket服務(wù)器,通過(guò)無(wú)阻塞機(jī)制來(lái)獲取更高的處理效率,需要的朋友可以參考下
    2015-07-07
  • WPF實(shí)現(xiàn)動(dòng)畫(huà)效果(四)之緩動(dòng)函數(shù)

    WPF實(shí)現(xiàn)動(dòng)畫(huà)效果(四)之緩動(dòng)函數(shù)

    這篇文章介紹了WPF實(shí)現(xiàn)動(dòng)畫(huà)效果之緩動(dòng)函數(shù),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • C#實(shí)現(xiàn)讀取Word表格到DataSet

    C#實(shí)現(xiàn)讀取Word表格到DataSet

    在應(yīng)用項(xiàng)目里,多數(shù)情況下我們會(huì)遇到導(dǎo)入 Excel 文件數(shù)據(jù)到數(shù)據(jù)庫(kù)的功能需求,但某些情況下,也存在使用 Word 進(jìn)行表格數(shù)據(jù)編輯的情況,這其中也包括導(dǎo)入Word內(nèi)容的功能,比如表格數(shù)據(jù)導(dǎo)出到DataSet數(shù)據(jù)集,本文將給大家介紹了C#讀取Word表格到DataSet
    2023-12-12

最新評(píng)論