C#垃圾回收和资源管理

计算机内存有限,当变量或对象不在需要内存的时候,必须回收内存。值类型离开作用域就会被销毁,引用类型呢?

对象生存期

Monkey monkey = new Monkey();

上面的代码中new表面上是单步操作,但实际分两步走:
1.new从堆中分配原始内存,这个阶段无法干预
2.new操作符将原始内存转换成对象,这时必须初始化对象。这个阶段可用构造器控制.
monkey变量离开作用域时,它引用的Monkey对象就没人引用了,所以对象可被销毁,占用的内存可被回收.
和对象创建相似,对象销毁也分两步:
1.CLR执行清理工作,可以写一个析构器来加以控制。
2.CLR将对象占用的内存归还给堆,解除对象内存分配,这个阶段没有控制权.

销毁对象并将内存归还给堆的过程称为垃圾回收.

编写析构器

使用析构器,可在对象被垃圾回收时执行必要的清理.CLR能自动清理对象使用的任何托管资源,所以许多时候都不需要自己写析构器.但如果托管资源很大,就可以考虑将堆该资源的所有引用设为null,使资源能被理解清理。
另外,如果对象引用了非托管资源,析构器就更有用了.

析构器的语法是先写一个~符号,在添加类名:
在这里插入图片描述
注意:
1.析构器只适合引用类型,值类型不能声明析构器
2.不能为析构器指定访问修饰符,因为析构器总是由垃圾回收器帮你调用,你不能自己调用.
3.析构器不能获取任何参数.因为你自己调用不了

编译器内部自动将析构器转换成对Object.Finalize方法的一个重写方法的调用.

    class Monkey
    {
   
        ~Monkey()
        {
   
			...
        }
    }

将会转换成以下形式:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值