当前位置:  开发笔记 > 程序员 > 正文

是什么阻止了C#中的线程被收集?

如何解决《是什么阻止了C#中的线程被收集?》经验,为你挑选了2个好方法。

在.NET中,在此代码之后,什么机制阻止Thread对象被垃圾回收?

new Thread(Foo).Start();
GC.Collect();

是的,可以安全地假设某些东西有对线程的引用,我只是在徘徊究竟是什么.出于某种原因,Reflector没有向我展示System.Threading,所以我不能自己挖掘它(我知道MS发布了.NET框架的源代码,我只是没有它的方便).



1> EricSchaefer..:

只要运行时,运行时就会保留对线程的引用.只要有人仍然保留该参考,GC就不会收集它.



2> Ilya Ryzhenk..:

这取决于线程是否正在运行.如果您刚刚创建了Thread对象但没有启动它,则它是一个普通的托管对象,即符合GC条件.一旦启动线程,或者为已经运行的线程(GetCurrentThread)获取Thread对象,它就会有所不同.管理线程的"公开对象"现在在CLR中保持强引用,因此您始终获得相同的实例.当线程终止时,将释放此强引用,并且只要您没有对(现在已死)Thread的任何其他引用,就会收集托管对象.

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有