C# 中线程死亡后资源会被自动回收释放内存吗

在C#中new了一个线程后,执行完成后线程自然死亡,死亡后资源会被自动回收释放内存吗

1个回答

要看什么类型的资源,只有托管内存才有垃圾回收,别的资源(比如打开的句柄、数据库链接、文件锁定、非托管内存)不会自动回收。
但是一些封装好的库会实现dispose方法,并且在析构函数里调用,回收这个对象用的非托管资源(上述各种)。所以还是可以回收。
但是这就有个问题了,就是C#的垃圾回收是“懒惰”的,也就是并不是一个对象不再访问,就立刻回收,而是内存使用超过一定阙值,才会垃圾回收。
如果内存没用多少,而非托管资源资源用了很多,那么这些非托管资源就得不到及时的回收了。

C#的垃圾回收,采用的是从根对象遍历,并且把所有无法访问到的资源标记为垃圾,进行回收。这不同于一些语言,比如有的语言用的是引用计数。当一个对象不再引用就立刻回收。
所以垃圾回收肯定有,但是不一定是“线程死亡后”立刻就回收。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐