2012年1月18日
摘要: 1、使用场景: Finalize:Finalize 是 Object的方法,C# 类中使用了非托管资源,重写Finalize ,在方法内部释放非托管资源。从而保证了当前类被释放的同时,也释放了内部使用的非托管资源。这里的重写不能使用override,而是使用析构函数来达到同样效果。 Dispose:Dispose是 接口IDisposable的方法,实现Dispose方法,对象自身释放非托管资源。2、调用Finalize告诉GC回收当前对象,即使不调用Finalize,GC也会在恰当的时机回收该对象;对象必须手动调用Dispose,释放自身。为了更好地理解,有些类对Dispose 方法进行包装 阅读全文
posted @ 2012-01-18 13:38 Andy Niu 阅读(438) 评论(0) 推荐(0)
摘要: 托管资源:一般是指被CLR控制的内存资源,这些资源由CLR来管理。可以认为是.net 类库中的资源。非托管资源:不受CLR控制和管理的资源,比如文件流,数据库的连接,网络连接,系统的窗口句柄,打印机资源等,这类资源一般不存在堆上。可以认为操作系统资源的一组API。对于托管资源,GC负责垃圾回收。对于非托管资源,GC可以跟踪非托管资源的生存期,但是不知道如何释放它,这时候就要人工进行释放。 阅读全文
posted @ 2012-01-18 11:27 Andy Niu 阅读(2322) 评论(0) 推荐(1)
摘要: 1、使用场景:栈记录代码执行的路径;堆保存引用类型的实例。2、栈自行维护,一个步骤执行完,自动从栈顶弹出;堆需要GC来进行垃圾回收。3、数据可以分为四类:值类型、引用类型、引用、指令。其中,引用是指类型为引用类型的变量,指令是指一个一个的操作。4、内存分配:引用类型总是分配在堆上;值类型和引用总是分配在它们被声明的地方;指令总是分配在栈上。5、值类型在赋值或者参数传递时,总是“整体拷贝”;引用类型在赋值或者参数传递时,总是“复制引用”。如果要想让值类型具备“复制引用”的特点,需要使用ref 关键词。如果要让引用类型具备“整体拷贝”的特点,需要让引用类型 ICloneable接口,实现接口中的方 阅读全文
posted @ 2012-01-18 10:19 Andy Niu 阅读(195) 评论(0) 推荐(0)