.NET垃圾回收笔记
生活随笔
收集整理的這篇文章主要介紹了
.NET垃圾回收笔记
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? 名詞
? ? 垃圾收集目標
- ? ? ? ephemeral GC
? ? ? ? 發生在Gen 0 和Gen 1 的垃圾收集
- ? ? ? Full GC
? ? ? ? 發生Gen 2 及以上的Gen與LOH的垃圾收集
? ? 垃圾收集模式
- ? ? ? 工作站模式
? ? ? ? GC直接發生在內存分配的線程(也是當前的工作托管線程)上
- ? ? ? 服務器模式
? ? ? ? 每個CPU核都有一個自己獨立的GC線程與托管堆
? ? 垃圾收集的并發需求
- ? ? ? 并發的意思是background GC在進行垃圾收集時,其它托管線程是否可以同時工作(包括分配內存)
- ? ? ? 僅需為Full GC考慮并發,因為ephemeral GC的時間短、代價小,可一直為阻塞模式。
- ? ? ? .NET4后的并發可讓background GC與ephemeral GC同時工作
? 配置
? ??
<configuration><runtime><gcConcurrent enabled="true"/><gcServer enabled="true"/></runtime> </configuration>?? 繼承與垃圾回收模型
using System;namespace 繼承與垃圾回收模型 {class Base : IDisposable {private bool _disposed;protected virtual void Dispose(bool disposing) {Console.WriteLine(string.Format("Base.Dispose({0})", disposing));if (!_disposed) {if (disposing) {#region 清理Base自己的托管資源#endregion}#region 清理Base自己的非托管資源#endregion}_disposed = true;}public void Base干活() {if (_disposed) {throw new ObjectDisposedException("Base");}}~Base() {Console.WriteLine("~Base()");Dispose(false);}public void Dispose() {Console.WriteLine("");Dispose(true);GC.SuppressFinalize(this);}}class Child : Base {private bool _disposed;protected override void Dispose(bool disposing) {Console.WriteLine(string.Format("Child.Dispose({0})", disposing));if (!_disposed) {try {if (disposing) {#region 清理Child自己的托管資源#endregion}#region 清理Child自己的非托管資源#endregion_disposed = true;}finally {base.Dispose(disposing);}}}public void Child干活() {if (_disposed) {throw new ObjectDisposedException("爸爸");}}//“可以”為Child寫析構方法,但沒必要。內部的“Dispose(false)”也沒必要~Child() {Console.WriteLine("~Child()");}}class 回收示例 {/// <summary>/// 輸出:/// -----以下為手動回收/// Child.Dispose(True)/// Base.Dispose(True)////// -----以下為自動回收/// ~Child()/// ~Base()/// Child.Dispose(False)/// Base.Dispose(False)/// </summary>/// <param name="args"></param>static void Main(string[] args) {Console.WriteLine("-----以下為手動回收");var 手動 = new Child();手動.Dispose();Console.WriteLine("/n/n-----以下為自動回收");var 自動 = new Child();GC.Collect();}} }
?
? 資料
? ??實現 Dispose 方法
? ? 垃圾回收通知
? ??.Net Discovery 系列之七--深入理解.Net垃圾收集機制(拾貝篇) 發布在新年第一秒
? ??.Net Discovery 系列之四--深入理解.Net垃圾收集機制(下)
? ? So, what’s new in the CLR 4.0 GC?? ? ??
? ? .NET 4/4.5里新的垃圾收集機制? ? ??
? ? 對象代(Generation)與GC? ? ??
? ? Using GC Efficiently – Part 2? ? ??
? ? CLR探索系列:Server and Workstation Garbage Collection探索(垃圾回收系列)
? ? ??
轉載于:https://www.cnblogs.com/beta2013/p/3377259.html
總結
以上是生活随笔為你收集整理的.NET垃圾回收笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hoj 2739 中国邮局问题
- 下一篇: 中国银行家装分期手续费多少?如何收取?