使用ThreadPool进行垃圾收集

时间:2011-11-02 14:48:57

标签: c# .net multithreading garbage-collection threadpool

鉴于以下内容......

public MyClass
{
    public void MyClass()
    {
        var myWorkerClass = new MyWorkerClass();
        myWorkerClass.DoSomething();
        // and exit quickly
    }
}

public MyWorkerClass()
{
    public void DoSomething()
    {
        ThreadPool.QueueUserWorkItem(() =>
            {
                SomeLongRunningProcess();
            });
    }

    public static void SomeLongRunningProcess()
    {
        // Something that takes a long time
    }
}

MyWorkerClass和MyClass什么时候有资格进行垃圾回收?

我的想法是MyWorkClass中的匿名函数.DoSomething()将存储在MyWorkerClass的局部变量声明空间中。这将足以引用它们,直到线程完成。这是对的吗?

1 个答案:

答案 0 :(得分:2)

MyClass应该有资格立即收集。 SomeLongRunningProcess()完成后,MyWorkerClass将有资格进行收集(假设前面提到的方法引用'this',在您的示例中不是这样)。

正如您的代码现在所示,这两个实例都立即符合条件。

如果你想让MyClass或MyWorkerClass闲逛,可以从SomeLongRunningProcess或调用它的闭包中引用它。