激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - ASP.NET教程 - .Net 垃圾回收機制詳細(xì)介紹

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

2020-03-31 18:13lqh ASP.NET教程

這篇文章主要介紹了.Net 垃圾回收機制詳細(xì)介紹的相關(guān)資料,這里對垃圾回收機制做了詳細(xì)的講解,需要的朋友可以參考下

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

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

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

?
1
2
3
4
5
6
7
8
class Test
{
  protected override void Finalize()
  {
    try {…}
    finally { base.Finalize(); }
  }
}

垃圾回收器

.NET垃圾回收器會保證:

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

工作方式:

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

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class MyClass : IDisposable
{
  private bool disposed = false;//Disposal 狀態(tài)
 
  public void Dispose()//公有Dispose方法(可選實現(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);用于阻止編譯器在這個對象上執(zhí)行析構(gòu)。

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

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 欧美高清另类自拍视频在线看 | 91精品国产网站 | 国产精品亚洲精品日韩已方 | 99热高清 | 一区二区三区视频在线观看 | 精品一区二区三区在线视频 | 成人毛片视频在线观看 | 欧美三级毛片 | 欧美一区2区三区4区公司二百 | 精品视频 久久久 | 亚州精品国产 | 免费看黄色一级片 | 国产成人在线视频播放 | 黄色视频a级毛片 | 免费国产视频在线观看 | 国产在线播放91 | 在线成人影视 | 亚洲一区久久 | 99极品视频 | 日日操夜夜透 | 午夜天堂在线视频 | 国产精品手机在线亚洲 | 色视频在线 | 成人免费看毛片 | 俄罗斯理伦片 | 法国极品成人h版 | 欧美精品一区二区三区在线 | av免费av | 久久久婷婷一区二区三区不卡 | 鲁久久| 精品国产91久久久久久久 | 午夜免费一区 | av电影在线网 | 中文字幕在线网 | 免费人成在线观看网站 | 91在线色视频 | av在线免费不卡 | 国产精品久久久久久久av三级 | 91一区二区三区久久久久国产乱 | 国产一区视频在线免费观看 | 免费观看又色又爽又黄的崩锅 |