最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

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

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

public class MyResourceRelease: IDisposable
{
  /// 保證資源只用釋放一次
  private bool _alreadyDisposed = false;
  /// 用來判斷釋放資源的類別(托管和非托管)
  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的,所以還可以在派生類里面對它進(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);
     }
  }
}

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

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

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

相關(guān)文章

  • C#中使用1.7版本驅(qū)動操作MongoDB簡單例子

    C#中使用1.7版本驅(qū)動操作MongoDB簡單例子

    這篇文章主要介紹了C#中使用1.7版本驅(qū)動操作MongoDB簡單例子,本文給出了連接MongoDB、操作MongoDB數(shù)據(jù)等例子,需要的朋友可以參考下
    2015-01-01
  • ListView Adapter優(yōu)化 實(shí)例

    ListView Adapter優(yōu)化 實(shí)例

    ListView Adapter優(yōu)化 實(shí)例,需要的朋友可以參考一下
    2013-04-04
  • 采用C#實(shí)現(xiàn)軟件自動更新的方法

    采用C#實(shí)現(xiàn)軟件自動更新的方法

    這篇文章主要介紹了采用C#實(shí)現(xiàn)軟件自動更新的方法,非常實(shí)用的功能,需要的朋友可以參考下
    2014-08-08
  • 輕松學(xué)習(xí)C#的基礎(chǔ)入門

    輕松學(xué)習(xí)C#的基礎(chǔ)入門

    輕松學(xué)習(xí)C#的基礎(chǔ)入門,了解C#最基本的知識點(diǎn),C#是一種簡潔的,類型安全的一種完全面向?qū)ο蟮拈_發(fā)語言,是Microsoft專門基于.NET Framework平臺開發(fā)的而量身定做的高級程序設(shè)計(jì)語言,需要的朋友可以參考下
    2015-11-11
  • C#讀寫INI文件的最簡方法

    C#讀寫INI文件的最簡方法

    INI文件,全稱為Initialization File(初始化文件),是一種傳統(tǒng)的文本型配置文件格式,廣泛應(yīng)用于Windows操作系統(tǒng)及早期應(yīng)用程序中,本文將聚焦于C#語言環(huán)境下,介紹如何以最簡化的方式實(shí)現(xiàn)INI文件的讀寫操,需要的朋友可以參考下
    2025-01-01
  • C#中Winform獲取文件路徑的方法實(shí)例小結(jié)

    C#中Winform獲取文件路徑的方法實(shí)例小結(jié)

    這篇文章主要介紹了C#中Winform獲取文件路徑的方法,以實(shí)例形式較為詳細(xì)的總結(jié)了WinForm關(guān)于路徑操作的常用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10
  • .net的序列化與反序列化實(shí)例

    .net的序列化與反序列化實(shí)例

    這篇文章主要介紹了.net的序列化與反序列化實(shí)例,詳細(xì)講述了.net序列化與反序列化的基本原理與用法實(shí)例,具有很好的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-10-10
  • Unity 點(diǎn)擊UI與點(diǎn)擊屏幕沖突的解決方案

    Unity 點(diǎn)擊UI與點(diǎn)擊屏幕沖突的解決方案

    這篇文章主要介紹了Unity 點(diǎn)擊UI與點(diǎn)擊屏幕沖突的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 深入淺析C#中單點(diǎn)登錄的原理和使用

    深入淺析C#中單點(diǎn)登錄的原理和使用

    這篇文章主要介紹了C#中單點(diǎn)登錄的原理和使用,需要的朋友可以參考下
    2017-10-10
  • C# 使用SHA1算法對密碼進(jìn)行加密

    C# 使用SHA1算法對密碼進(jìn)行加密

    這篇文章主要介紹了C# 使用SHA1算法對密碼進(jìn)行加密,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-03-03

最新評論

三原县| 昌宁县| 宁蒗| 尼勒克县| 沛县| 烟台市| 永仁县| 武胜县| 尼木县| 泾源县| 通道| 申扎县| 东方市| 卫辉市| 收藏| 和政县| 蓬安县| 昌邑市| 北宁市| 车致| 济源市| 阳城县| 清新县| 塘沽区| 武隆县| 西乌珠穆沁旗| 师宗县| 永修县| 行唐县| 永定县| 青川县| 桃园县| 溧水县| 广水市| 贞丰县| 孟连| 逊克县| 济南市| 乐山市| 永福县| 彭州市|