Net 托管资源 非托管资源 垃圾回收

本文探讨了.NET CLR的垃圾回收机制及其在实际开发中的应用。垃圾回收主要负责托管资源的自动释放,但对于非托管资源如数据库连接和文件,需要手动释放。在WinForm开发中,特定情况下如Form的释放,其内部字段是否自动释放以及ADO.NET中的对象管理(如DataSet, DataTable)是否需要手动释放等问题提出讨论,以期明确何时需要介入资源管理。" 104487574,7805977,检测镜像对称二叉树的方法,"['数据结构', '算法', '二叉树']
摘要由CSDN通过智能技术生成

     CLR为开发者提供了一个非常让人激动的功能--垃圾回收。但是园子里关于垃圾回收的讨论,大多是讨论垃圾回收的原理,以及Dispose模式。但是垃圾回收在实际使用时,是不是可以达到其设计的目标,在开发过程中有没有需要注意的问题呢?本人也不是非常明确,这篇文章希望能达到抛砖引玉的效果,希望个人牛人能够给本人或同样存在疑惑的人一个清楚明确的答案。

 

     什么是垃圾回收?就是说你在使用CLR的时候(不包含托管资源) ,只需要new一个对象使用。而不需要通过程序代码进行释放对象(以上是本人理解的垃圾回收的意义)。

     托管资源 非托管资源 

     托管资源和非托管资源的区别通常会让开发者弄不清楚,到底什么是托管的,什么不是托管的。这里说一下自己的体会。如果你使用的Class是属于CLR的,不管它实际上使用的什么资源。CLR都会帮你进行垃圾回收。简单的比如一个List对象,你使用完成(变量脱离其作用域)就会被CLR自动回收。那么对于网上常说的数据连接,文件类呢?其实同样会在使用完成后被自动回收,但是因为此类资源很重要,而垃圾回收的时机不确定。所以很多教材上说此类资源需要在使用完成后及时释放(通过程序代码)。这里说明一点就是CLR的Class都会被自动回收,无论它实际控制的是托管资源还是非托管资源。

     这里可以做一个简单的测试,一个WinForm项目,两个Button(button1, button2) ,点击事件如下。

     private void button1_Click(object sender, EventArgs e)

        {

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值