C#内存打点和垃圾回收机制
垃圾回收机制
一、数据类型C#中的数据类型分为值类型 (Value type) 和引用类型(reference type),
值 类 型: 所有的值类型都集成自 System.ValueType 上,除非加声明?否则不成为null,生存在 仓库(Stack,先进后出)上,常见的值类型有:整形、浮点型、bool、枚举等。
引用类型:所有的引用类型都担任自System.Object 上,引用类型生存在 托管堆(Head,先进先出)上,常见的类型有:数组、字符串、接口、委托、object等。
拆箱和装箱:引用类型和值类型的彼此转换叫做拆装箱操纵。
拆箱:拆箱就是将一个引用型东西转换成任意值型!好比:
int i=0; System.Object obj=i; int j=(int)obj;
装箱:装箱就是隐式的将一个值型转换为引用型东西。好比:
int i=0; Syste.Object obj=i;
二、垃圾回收机制 GC 1、简介C#中和Java一样是一种系统自动回收释放资源的语言,在C#环境中通过 GC(Garbage Collect)进行系统资源回收,在数据根基类型中介绍到,C#数据类型分为引用类型和值类型,
值类型生存在Stack上,跟着函数的执行感化域执行完毕而自动出栈,所以这一类型的资源不是GC所关心 东西。GC垃圾回收主要是是指生存在Heap上的资源。
.NET的GC机制有这样两个问题:
首先,GC并不是能释放所有的资源。它不能自动释放非托管资源。
第二,GC并不是实时性的,这将会造成系统性能上的瓶颈和不确定性。
GC并不是实时性的,这会造成系统性能上的瓶颈和不确定性。所以有了IDisposable接口,IDisposable接口界说了Dispose要领,这个要领用来供措施员显式挪用以释放非托管资源。使用using语句可以简化资源打点。
上面介绍到,GC只释放托管资源,那么什么是托管资源和费托管资源。
托管资源 : 托管资源指的是.NET可以自动进行回收的资源,主要是指托管堆上分配的内存资源。托管资源的回收事情是不需要人工干与干预的,有.NET运行库在合适挪用垃圾回收器进行回收。
非托管资源:非托管资源指的是.NET不知道如何回收的资源,最常见的一类非托管资源是包装操纵系统资源的东西,例如文件,窗口,网络连接,数据库连接,画刷,图标 等。这类资源,
垃圾回收器在清理的时候会挪用Object.Finalize()要领。默认情况下,要领是空的,,对付非托管东西,需要在此要领中编写回收非托管资源的代码,以便垃圾回收器正确回收资源。
总结:托管资源是释放由GC来完成,释放的时间吧不必然,一般是系统觉得内存急急,会进行告急回收资源。一个东西想成为被回收,首先需要成为垃圾,GC是通过判断东西及其子东西有没有指向有效的引用,
如果没有GC就认为它是垃圾。垃圾回收机制通过必然的算法得到哪些没有被被引用、或者不再挪用的资源,当这些垃圾到达必然的数量时,回启动垃圾回收机制,GC回收实际上是挪用了析构函数。
垃圾回收机制意味着你不需要担忧措置惩罚惩罚不再需要的东西了。咱们关心的主要长短托管资源的释放。
3、非托管资源的释放在界说一个类时,可以使用两种差此外机制类释放非托管资源,这两周机制有时候凡是放在一起使用
1、声明析构函数(终结器)吗,作为类的成员
2、在类中实现 System.IDisposable 接口
public class AA { ~AA() { MessageBox.Show("析构函数被执行了"); } }
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/35002.html