C#资源回收总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#资源回收总结相关的知识,希望对你有一定的参考价值。

目前项目使用C#开发移动平台项目,温故而知新。

资源类型,总体分为三类:堆栈、托管堆、非托管资源

堆栈:内存原理先进后出,包含值类型和引用类型部分内容。

   值类型-》它在释放资源的顺序上与定义变量时分配内存的顺序相反.值变量一旦出了作用域就会从堆栈中删除对象.

   堆:引用类型

   引用类型则存储在堆中.,new一个类时,此时就会为对象分配内存存入托管堆中,它可以在方法退出很长的时间后仍然可以使用.我以一句常用的实例类的语句来说明下.

    classA a=new classA();

    这句非常平常的语句其实可以分成两部分来看:

    第一:classA a;声明一个classA的引用a,在堆栈上给这个引用分配存储空间.它只是个引用,并不是真正的对象.它包含存储对象的地址.

    第二:a=new classA();分配堆上的内存,以存储真正的对象.然后修改a的值为新对象的内存地址.

    当引用出了作用域后,就会从堆栈上删除引用,但引用对象的数据仍然存储在托管堆中,一直到程序停止,或者是GC删除.

         第三:Dispose

    如果classA继承了IDispose,在调用Dispose方法后,程序仍然可以访问对象的原因了.Dispose对托管资源不起作用。

 

  非托管资源:COM/COM++组件,ActiveX控件,API函数,WIN32,指针运算,自制的资源文件...这些的非托管的,其它就是托管的.

  总结:C#非托管资源使用IDispose接口,托管资源不需要使用IDispose接口系统GC自动回收或者使用GC.Collect();

参考文章:

http://blog.sina.com.cn/s/blog_8abeac5b01019u19.html

http://bbs.csdn.net/topics/270000476

 

以上是关于C#资源回收总结的主要内容,如果未能解决你的问题,请参考以下文章

C#关于垃圾回收 终结器IDispose的设计规范札记

浅析C#中的托管非托管堆栈与垃圾回收

浅析C#中的托管非托管堆栈与垃圾回收

C#手动回收内存的简单方法

C# 垃圾回收

C# 垃圾回收机制(GC) 的概述 资源清理 内存管理