在C#中new了一个线程后,执行完成后线程自然死亡,死亡后资源会被自动回收释放内存吗
1条回答
- threenewbee 2018-09-13 02:22关注
要看什么类型的资源,只有托管内存才有垃圾回收,别的资源(比如打开的句柄、数据库链接、文件锁定、非托管内存)不会自动回收。
但是一些封装好的库会实现dispose方法,并且在析构函数里调用,回收这个对象用的非托管资源(上述各种)。所以还是可以回收。
但是这就有个问题了,就是C#的垃圾回收是“懒惰”的,也就是并不是一个对象不再访问,就立刻回收,而是内存使用超过一定阙值,才会垃圾回收。
如果内存没用多少,而非托管资源资源用了很多,那么这些非托管资源就得不到及时的回收了。C#的垃圾回收,采用的是从根对象遍历,并且把所有无法访问到的资源标记为垃圾,进行回收。这不同于一些语言,比如有的语言用的是引用计数。当一个对象不再引用就立刻回收。
所以垃圾回收肯定有,但是不一定是“线程死亡后”立刻就回收。解决 2无用
悬赏问题
- ¥15 ubuntu子系统密码忘记
- ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
- ¥15 保护模式-系统加载-段寄存器
- ¥15 电脑桌面设定一个区域禁止鼠标操作
- ¥15 求NPF226060磁芯的详细资料
- ¥15 使用R语言marginaleffects包进行边际效应图绘制
- ¥20 usb设备兼容性问题
- ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
- ¥15 安装svn网络有问题怎么办
- ¥15 vue2登录调用后端接口如何实现