C#中回收垃圾是那种方式回收的,是程序结束才会回收,还是方法结束后会回收。在方法中new了几个产量
答案:1 悬赏:80 手机版
解决时间 2021-04-06 06:13
- 提问者网友:愿为果
- 2021-04-05 19:43
C#中回收垃圾是那种方式回收的,是程序结束才会回收,还是方法结束后会回收。在方法中new了几个产量
最佳答案
- 五星知识达人网友:蓝房子
- 2021-04-05 21:10
.net 运行环境有个东西叫垃圾回收器GC,负责回收C#运行时没有再被引用的垃圾托管对象,至于什么时候回收,是GC的回收策略问题,其时机对于C#程序而言是随机的,没有确切的时机。
一个对象可能被多次引用,并不是在方法结束后就回收,因为可能还有其它引用着它。如果所有引用都出了作用域,也不一定就是在最后一引用出作用域后就立即回收该对象。对象被回收的时间点是在其所有引用出了作用域之后一直到程序进程退出之间,具体什么时间点不得而知,看GC的"心情"。
对象被回收的时候会调用其析构函数,于是可以看出,对象析构时间点就是被回收时间点,所以你不要指望通过析构函数去执行什么需要立即执行的代码,它并不靠谱,因此也导致C#的析构函数基本没什么鸟用,雷声大雨点小的感觉。这点它就跟C++很不同。
于是C#就又造了一种接口IDispose,要求你在它的dispose方法中实现对资源的释放来配合析构函数做一些资源释放操作,甚至当你想及时清理的时候只能你自己代码主动调用dispose,当然C#又加了个using语法糖来在帮你引用出作用域时自动调用dispose。。。
一个对象可能被多次引用,并不是在方法结束后就回收,因为可能还有其它引用着它。如果所有引用都出了作用域,也不一定就是在最后一引用出作用域后就立即回收该对象。对象被回收的时间点是在其所有引用出了作用域之后一直到程序进程退出之间,具体什么时间点不得而知,看GC的"心情"。
对象被回收的时候会调用其析构函数,于是可以看出,对象析构时间点就是被回收时间点,所以你不要指望通过析构函数去执行什么需要立即执行的代码,它并不靠谱,因此也导致C#的析构函数基本没什么鸟用,雷声大雨点小的感觉。这点它就跟C++很不同。
于是C#就又造了一种接口IDispose,要求你在它的dispose方法中实现对资源的释放来配合析构函数做一些资源释放操作,甚至当你想及时清理的时候只能你自己代码主动调用dispose,当然C#又加了个using语法糖来在帮你引用出作用域时自动调用dispose。。。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯