C# 新线程()和垃圾收集内存泄漏?

C# 新线程()和垃圾收集内存泄漏?,c#,multithreading,garbage-collection,C#,Multithreading,Garbage Collection,我有以下代码: new Thread(new ThreadStart(delegate() { // something short })).Start(); 垃圾收集器能否在已停止状态下完成线程的此实例 此线程的生存期为: 开始之前 正在运行 已停止 当该线程将结束其工作时,垃圾收集器将收集该线程,或者他们将保留该线程的句柄,以便将来重新启动该线程。线程终止后,系统不会引用该线程的实例 无法重新启动已停止的线程实例。线程终止后,系统不会引用线程实例 无法重新启动已停止的线程实例。是。

我有以下代码:

new Thread(new ThreadStart(delegate()
{
    // something short
})).Start();
垃圾收集器能否在
已停止
状态下完成
线程的此实例

此线程的生存期为:

  • 开始之前
  • 正在运行
  • 已停止

  • 当该
    线程将结束其工作时,垃圾收集器将收集该线程,或者他们将保留该线程的句柄,以便将来重新启动该线程。

    线程终止后,系统不会引用该
    线程的实例


    无法重新启动已停止的
    线程
    实例。

    线程终止后,系统不会引用
    线程
    实例

    无法重新启动已停止的
    线程
    实例。

    是。一次:

  • 线程已停止(例如,调用的委托已返回)
  • 不再有对
    线程
    对象的根引用
  • 然后就可以收集了。但是,您不会注意到,因为此时您没有要检查它的对象的引用,它所表示的线程上没有运行的代码,而且永远不会有

    我想你可以有一个
    WeakReference
    来保存对对象的引用,当它的
    IsAlive
    为false时,你就会知道它已被收集。你为什么会在意呢?

    是的。一次:

  • 线程已停止(例如,调用的委托已返回)
  • 不再有对
    线程
    对象的根引用
  • 然后就可以收集了。但是,您不会注意到,因为此时您没有要检查它的对象的引用,它所表示的线程上没有运行的代码,而且永远不会有


    我想你可以有一个
    WeakReference
    来保存对对象的引用,当它的
    IsAlive
    为false时,你就会知道它已被收集。你为什么会在意呢?

    不,这意味着你不能完成它?如何完成它?即使我能处理这个问题,GC也会在你没有更多的引用后自动处理。不可能显式释放对象。Net对象没有句柄。但是看看代码,我根本没有对
    线程的引用,那么当这个线程停止(工作结束)时,它就会被终止?”。Net对象没有句柄。从技术上讲,这是真的吗?我认为任何.NET对象都有一个句柄和许多其他元数据指针。它们只是不暴露于用户代码。然而,CLR使用句柄和引用来完成许多事情,包括GC、JIT、方法解析等。不,这意味着不能完成它?如何完成它?即使我能处理这个问题,GC也会在你没有更多的引用后自动处理。不可能显式释放对象。Net对象没有句柄。但是看看代码,我根本没有对
    线程的引用,那么当这个线程停止(工作结束)时,它就会被终止?”。Net对象没有句柄。从技术上讲,这是真的吗?我认为任何.NET对象都有一个句柄和许多其他元数据指针。它们只是不暴露于用户代码。然而,CLR使用句柄和引用来做很多事情,包括GC、JIT、方法解析等-(这就是为什么我有问题要解决that@Svisstack尝试内存探查器或SOS调试器查看内存中的内容。是的,@oleksii说了什么。如果内存有问题,请查看内存,而不是线程;)我有大量内存泄漏-(这就是为什么我有问题要解决that@Svisstack尝试使用内存探查器或SOS调试器查看内存中的内容。是的,@oleksii是这么说的。如果内存有问题,请查看内存,而不是线程;)