码迷,mamicode.com
首页 > Windows程序 > 详细

C#资源回收总结

时间:2016-05-16 23:15:03      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:

目前项目使用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#资源回收总结

标签:

原文地址:http://www.cnblogs.com/betry/p/5499786.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!