unity学习(垃圾回收,资源释放)

本文探讨了C#中的垃圾回收机制,GC如何管理托管和非托管资源。重点介绍了Unity中非托管资源的释放问题,强调了手动管理非托管资源的重要性。同时,解释了GC回收的时间不确定性以及对实现析构函数的类的处理方式。提出了通过实现Dispose方法和调用GC.SuppressFinalize()来有效管理资源的解决方案。
摘要由CSDN通过智能技术生成

在C++中,所有你在堆上申请的内存空间,必须手动释放掉,否则就会造成内存的泄露。
C#使用了GC(Garbage Collector)来进行内存的管理以达到自动释放不需要的内存的目的,但是GC并不能做的十分完美,对于一些非托管资源,GC无能为力,这就要求我们必须手动的释放那么非托管资源。

托管与非托管资源

  • 托管资源:是指由垃圾收集器(GC)管理的内存。因为这块内存通过GC自动管理,所以我们不用关心。
  • 非托管资源:像Win32编程中的文件句柄,上下文句柄、窗口或网络连接等资源都属于非托管资源。
    在库中能找到的类产生的对象,都是托管资源。

GC进行垃圾回收的时间和顺序?

  • GC进行垃圾回收的时间无法确定(当然你手动调用GC的垃圾回收方法除外),并且顺序也不能确定!也就是说,你先申请的空间有可能在你后申请的空间释放之后释放。
  • GC对于实现析构函数和没实现析构函数的类处理方法不一样,简单些说GC对于实现了析构函数的类一定会调用他们的析构函数。
  • 析构函数会隐式的转换为 Finalize函数,Object.Finalize()方法也不能被重写
    ~Test()
    {
    }
    // 会隐式的转换为,会递归调用Finalize方法
    protected override void Finalize()
    {
    	 try
    	 {
    	  // Cleanup statements...
    	 }
    	 finally
    	 {
    	  base.Finalize();
    	 }
    }
    

解决方案

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值