.Net的内存管理,非托管资源的处理原则

在.Net中,垃圾回收器负责内存管理,但非托管资源如数据库连接、流对象等需要手动释放。非托管资源在Finalize方法中通常会释放系统资源,然而及时释放能避免连接池限制等问题。对于数据库连接,推荐使用完成后调用Dispose或Close来释放资源,以提高数据库服务效率。了解Finalize并适时使用Dispose或Close对非托管资源进行管理是关键。
摘要由CSDN通过智能技术生成


       在.Net框架中,内存的回收是由垃圾回收器去管理的,所以我们可以尽情的去申请内存资源,而不必考虑释放。但有些情况比较特别,对于非托管资源,我们最好自己考虑去释放。

非托管资源(Unmanaged Resource)是dot Net的一个概念,指诸如包装操作系统资源的一类对象,例如文件,窗口或网络连接

这里列举几种常见的非托管资源:画笔、流对象、组件对象等等资源(OdbcDataReader,OleDBDataReader,Pen,Regex,Socket,StreamWriter,ApplicationContext,Brush,Component,ComponentDesigner,Container,Context,Cursor,FileStream,Font,Icon,Image,Matrix,Timer,Tooltip);

为什么最好自己去释放?

首先得说说垃圾回收的过程,当引用类型的变量出了作用域以后,它不会立刻释放堆上的内存。当垃圾回收器觉得内存紧张的时候,才会进行内存回收。在内存回收之前,他会执行这个对象的Finalize方法。因此这些常见的非托管资源类通常会在自己的Finalize自己释放操作系统资源,如数据库连接。

貌似内存最终都会自己回收系统资源,对这些非托管资源我们完全可以不顾忌,但问题来了:对于数据库连接,一个连接池的连接数有限制,比如5个,在程序结束之后,垃圾回收之前,我们申请的连接对象会一直占用这个连接,导致数据库服务能力大降低。

对于这种问题,我们的解决方法是在代码运行结束之后,主动的去释放托管资源。如果SqlConnection这个对象,我们在操作完数据库以后&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值