在C++中,所有你在堆上申请的内存空间,必须手动释放掉,否则就会造成内存的泄露。
C#使用了GC(Garbage Collector)来进行内存的管理以达到自动释放不需要的内存的目的,但是GC并不能做的十分完美,对于一些非托管资源,GC无能为力,这就要求我们必须手动的释放那么非托管资源。文章来源地址https://www.toymoban.com/news/detail-559851.html
托管与非托管资源
- 托管资源:是指由垃圾收集器(GC)管理的内存。因为这块内存通过GC自动管理,所以我们不用关心。
- 非托管资源:像Win32编程中的文件句柄,上下文句柄、窗口或网络连接等资源都属于非托管资源。
在库中能找到的类产生的对象,都是托管资源。
GC进行垃圾回收的时间和顺序?
- GC进行垃圾回收的时间无法确定(当然你手动调用GC的垃圾回收方法除外),并且顺序也不能确定!也就是说,你先申请的空间有可能在你后申请的空间释放之后释放。
- GC对于实现析构函数和没实现析构函数的类处理方法不一样,简单些说GC对于实现了析构函数的类一定会调用他们的析构函数。
- 析构函数会隐式的转换为 Finalize函数,Object.Finalize()方法也不能被重写。
~Test() { } // 会隐式的转换为,会递归调用Finalize方法 protected override void Finalize() { try { // Cleanup statements... } finally { base.Finalize(); } }
解决方案
文章来源:https://www.toymoban.com/news/detail-559851.html
到了这里,关于unity学习(垃圾回收,资源释放)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!