非托管资源的释放

本文深入探讨了C#编程中数据类型与变量的区别,重点阐述了值类型与引用类型的概念,并详细解释了托管资源与非托管资源的管理方式及释放策略,帮助开发者更高效地进行资源管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、基础知识准备:
 
C#中的数据类型分为两种:值类型(int,char,double等)和引用类型(数组,用户自定义类型(包括类,接口,委托),object,字符串),对应也就有值类型的变量和引用类型的变量;面向对象编程中,简单数据类型是存放值的变量,这种变量关心的是值,因而称为值类型,另外,C#在堆(Heap)中创建和维护对象(一般是类),程序使用对象的存储地址来引用这个对象,这类用来保存地址的变量被称为引用类型变量;一个程序运行时,变量主要存放在“堆”和“栈”中,“栈”中主要用于存放“子函数的临时变量,局部变量”,“堆”中主要用于存放“全局变量,静态变量,new产生的变量”,托管资源主要研究的是“堆中的变量”吧
 
2、对“托管资源”的理解?
 
托管即托付管理,.Net中时托付给CLR(Common Language Runtime—公共语言运行时)管理(注:CLR提供内存管理机制GC-garbage collection);
 
资源指的是系统内存空间,可以是程序中建立的对象,作用域内的变量等;
 
托管资源合起来就是指被CLR控制的内存空间(资源),这些资源的分配与释放可由CLR完成,因而减轻程序员的负担;
 
3、“非托管资源”:不属于CLR管理(分配和释放内存),主要包括文件流、数据库的连接,COM对象,打印机资源等等;
 
4、“托管资源”与“非托管资源”的释放?
 
托管资源的释放由GC完成,非托管资源的释放有两种方法:
 
(1)实现protected void Finalize()来释放,因为GC在释放对象时会检查该对象是否实现了Finalize()方法,如果是则调用它,但这样会降低效率;
 
(2)通过实现一个接口显式地提供给客户端手工释放对象的方法,而不是等着GC来释放:System 命名空间内有一个 IDisposable 接口,拿

转载于:https://www.cnblogs.com/syf/archive/2013/04/03/2998051.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值