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

.Net  垃圾回收機(jī)制詳細(xì)介紹

 更新時(shí)間:2016年11月07日 11:08:10   投稿:lqh  
這篇文章主要介紹了.Net 垃圾回收機(jī)制詳細(xì)介紹的相關(guān)資料,這里對垃圾回收機(jī)制做了詳細(xì)的講解,需要的朋友可以參考下

析構(gòu)函數(shù)

析構(gòu)函數(shù)不能有修飾符,如public。不能接受任何參數(shù)。

編譯器自動(dòng)將一個(gè)析構(gòu)函數(shù)轉(zhuǎn)換成對Object.Finalize方法的一個(gè)override版,如下。

class Test
{
  protected override void Finalize()
  {
    try {…}
    finally { base.Finalize(); }
  }
}

垃圾回收器

.NET垃圾回收器會(huì)保證:

l  每個(gè)對象都會(huì)被摧毀,它的析構(gòu)函數(shù)一定會(huì)被運(yùn)行。當(dāng)一個(gè)程序結(jié)束后,所有對象都會(huì)被銷毀。
l  每個(gè)對象只被銷毀一次。
l  每個(gè)對象只有在不可抵達(dá)時(shí)(即不存在到該對象的引用時(shí))才會(huì)被銷毀。

工作方式:

1)         它構(gòu)造包含所有可抵達(dá)對象的一個(gè)map。為此,它會(huì)反復(fù)跟隨對象中的引用字段。垃圾回收器會(huì)非常小心地構(gòu)造這個(gè)map,并確保循環(huán)引用不會(huì)無限遞歸。這個(gè)map中任意對象都不會(huì)被認(rèn)為不可抵達(dá)。
2)         它檢查是否有任何不可抵達(dá)的對象具有一個(gè)需要運(yùn)行的析構(gòu)函數(shù)(運(yùn)行析構(gòu)函數(shù)的過程稱為finalization)。需要finalization的任何不可抵達(dá)的對象都會(huì)放到一個(gè)特殊的隊(duì)列中。這個(gè)隊(duì)列稱為freachable隊(duì)列。
3)         它回收剩余的不可抵達(dá)的對象(即不需要finalization的對象)。為此,它會(huì)在heap中向下移動(dòng)可抵達(dá)的對象,從而對heap進(jìn)行碎片整理,并釋放位于heap頂部的內(nèi)存。當(dāng)垃圾回收器移動(dòng)一個(gè)可抵達(dá)的對象時(shí),還會(huì)更新對該對象的引用。
4)         然后,它允許其他線程恢復(fù)執(zhí)行
5)         它在一個(gè)單獨(dú)的線程中,對需要finalization的不可抵達(dá)的對象(位于freachable隊(duì)列中)執(zhí)行finalize操作。 

有上面的總結(jié)可以看出,析構(gòu)函數(shù)的存在會(huì)使上面的過程多執(zhí)行2,5兩步。所以考慮使用using塊來代替泛型。如果所使用的一個(gè)類實(shí)現(xiàn)了Dispose方法(Close方法)。最好是在finally中調(diào)用這個(gè)方法(調(diào)用方法前需檢查這個(gè)要被dispose的對象的disposed屬性是否為false,只有在不為true時(shí)再dispose,這也是推薦使用using的原因,using很容易約束這個(gè)待析構(gòu)的變量的作用域-即一對大括號(hào)之間)?;蛘呤褂胾sing塊將使用這個(gè)類的代碼包圍。放入using塊的對象的類型必須實(shí)現(xiàn)IDisposable接口。

標(biāo)準(zhǔn)清理模式

最后給出一個(gè).NET推薦使用的標(biāo)準(zhǔn)清理模式代碼,示例代碼:

class MyClass : IDisposable
{
  private bool disposed = false;//Disposal 狀態(tài)

  public void Dispose()//公有Dispose方法(可選實(shí)現(xiàn)IDisposal接口)
  {
    Dispose(true);
    GC.SuppressFinalize(this);
  }

  ~MyClass()
  {
    Dispose(false);
  }

  protected virtual void Dispose(bool disposing)
  {
    if (!disposed)
    {
      if (disposing)
      {
        //Dispose the managed resources.
      }
      //Dispose the unmanaged resources.
    }
    disposed = true;
  }
}

上述代碼中,我們從析構(gòu)函數(shù)中調(diào)用Dispose方法,這樣可以確保Dispose執(zhí)行。,另外GC.SuppressFinalize(this);用于阻止編譯器在這個(gè)對象上執(zhí)行析構(gòu)。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • DiscuzNT 論壇與主站的同步登錄與退出

    DiscuzNT 論壇與主站的同步登錄與退出

    首先我先說明一下,我參考了這篇文章:http://nt.discuz.net/showtopic-49836.html,在這篇文章啟發(fā)下簡單化。 我裝的是2.5Beta版
    2009-03-03
  • 關(guān)于Net6?Xunit?集成測試的問題

    關(guān)于Net6?Xunit?集成測試的問題

    這篇文章主要介紹了Net6?Xunit?集成測試的相關(guān)知識(shí),下面我將Net6下沒有使用Startup以及NET6以前版本使用Startup的集成測試(單元測試?yán)淄┳鲆粋€(gè)梳理,需要的朋友可以參考下
    2022-05-05
  • Asp.net內(nèi)置對象之Server對象(概述及應(yīng)用)

    Asp.net內(nèi)置對象之Server對象(概述及應(yīng)用)

    Server對象提供對服務(wù)器上的方法和屬性的訪問以及進(jìn)行HTML編碼的功能,本文主要圍繞server對象介紹詳細(xì)功能及常用屬性和主要方法,感興趣的朋友可以了解下,或許對你學(xué)習(xí)server對象有所幫助
    2013-02-02
  • Asp.Net Core基于JWT認(rèn)證的數(shù)據(jù)接口網(wǎng)關(guān)實(shí)例代碼

    Asp.Net Core基于JWT認(rèn)證的數(shù)據(jù)接口網(wǎng)關(guān)實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于Asp.Net Core基于JWT認(rèn)證的數(shù)據(jù)接口網(wǎng)關(guān)的相關(guān)資料,文中通過示例代碼以及圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用Asp.net Core具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Entity Framework Core批處理SQL語句

    Entity Framework Core批處理SQL語句

    這篇文章介紹了Entity Framework Core批處理SQL語句的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • 詳解如何在ASP.NET Core中使用Redis

    詳解如何在ASP.NET Core中使用Redis

    Redis 是一個(gè)開源的內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)系統(tǒng),本篇文章主要介紹了如何在ASP.NET Core中使用Redis,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2016-12-12
  • DataSet 添加數(shù)據(jù)集、行、列、主鍵和外鍵等操作示例

    DataSet 添加數(shù)據(jù)集、行、列、主鍵和外鍵等操作示例

    DataSet 添加數(shù)據(jù)集、行、列、主鍵和外鍵等操作示例...
    2007-03-03
  • .Net Core讀取Json配置文件的實(shí)現(xiàn)示例

    .Net Core讀取Json配置文件的實(shí)現(xiàn)示例

    這篇文章主要介紹了.Net Core讀取Json配置文件的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • 通過RadioButton對DataList控件進(jìn)行單選實(shí)例說明

    通過RadioButton對DataList控件進(jìn)行單選實(shí)例說明

    本例實(shí)現(xiàn)通過RadioButton對DataList控件進(jìn)行單選,aspx拉一個(gè)DataList控件,把RadioButton置于DataList的ItemTemplate模版內(nèi);在.aspx.cs內(nèi)為DataList控件綁定數(shù)據(jù),很實(shí)用的功能,感興趣的朋友可以了解下啊
    2013-01-01
  • .NET Core API之格式化輸出對象OutputFormatter

    .NET Core API之格式化輸出對象OutputFormatter

    這篇文章介紹了.NET Core API之格式化輸出對象OutputFormatter,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04

最新評(píng)論