托管与非托管资源

区分:

        托管资源是指受 .NET垃圾回收器(GC)管理的资源

        非托管资源是指不受.NET垃圾回收器 (GC)管理的资源

属于非托管资源的:

        文件句柄,如:FileStream、StreamReader、StreamWritert

        数据库连接,如:SqlConnection

        网络套接字,如:Scoket、 TcpClient

       外部进程和线程,如:Process、Thread

       图形资源,如:Bitmap、Pen、Graphics

        内存映射文件,如:MenoryMappedFile

        Windows句柄:Windows API调用产生的句柄,如:xxHandle

        COM对象:与外部系统(如Excel)交互时,COM对象需要使 Marshal.ReleaseComObject 来显式释放

        硬件资源:与外部硬件设备的交互,需要手动释放,如:SerialPort。

释放方法:

        using: using是处理非托管资源的一种简便方式,它能确保对象在使用后被正确释放

using的对象必须实现IDisopsable接口(包含Dispose方法),自动调用dispose释放资源

using (FileStream stream = new FileStream(filePath, FileMode.Create, FileAccess.Write))
                    {
                        workbook.Write(stream);
                    }
public class FileStream : Stream     //FIleStream继承自Stream

public abstract class Stream : MarshalByRefObject, IDisposable   //Stream 实现了 IDisposable方法

        GC.Collect()/GC.WatiForPendingFinalizers():是一种强制触发垃圾回收的方法,用于让GC清理所有的未托管资源和对象。但是,垃圾回收的时机由系统决定,它不会立即清理对象

*如果可以的话,优先使用using释放。而不是依赖GC

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值