C#中回收垃圾是那种方式回收的,是程序结束才会回收,还是方法结束后会回收。在方法中new了几个产量
C#中回收垃圾是那种方式回收的,是程序结束才会回收,还是方法结束后会回收。在方法中new了几个产量程序运行时会多次循环进行一个动作,会重复调用一个方法,该方法中会有new...
C#中回收垃圾是那种方式回收的,是程序结束才会回收,还是方法结束后会回收。在方法中new了几个产量程序运行时会多次循环进行一个动作,会重复调用一个方法,该方法中会有new的变量。
展开
1个回答
展开全部
.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。。。
青绿环境
2024-11-28 广告
2024-11-28 广告
可回收垃圾处理是我们东莞市青绿环境科技有限公司的重要业务之一。我们致力于将废纸、塑料、金属、玻璃等可回收垃圾进行科学分类与高效回收。通过先进的处理技术,我们能够将这些垃圾转化为新的资源,实现资源的循环利用。这不仅有助于减少垃圾对环境的污染,...
点击进入详情页
本回答由青绿环境提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询