C# 在C中何时释放线程局部变量#

C# 在C中何时释放线程局部变量#,c#,C#,在以下代码中: public void f() { List l1<int> = new List<int>(); List l2<int> = new List<int>(); //.. populate l1 and l2 ThreadPool.QueueUserWorkItem(new WaitCallback(delegate(object state) { // use l1 and

在以下代码中:

public void f() 
{
    List l1<int> = new List<int>();
    List l2<int> = new List<int>();
    //.. populate l1 and l2
    ThreadPool.QueueUserWorkItem(new WaitCallback(delegate(object state)
    {
       // use l1 and l2
       // force gc.collect l1 and l2?
    }));
    //..
}
public void f()
{
列表l1=新列表();
列表l2=新列表();
//..填充l1和l2
ThreadPool.QueueUserWorkItem(新的WaitCallback(委托)(对象状态)
{
//使用l1和l2
//强制gc收集l1和l2?
}));
//..
}
l1和l2是线程本地非常大的列表。他们什么时候有资格进行垃圾收集?当线程执行完块后,它们是否合格

当线程处理完l1和l2时,强制它们进行垃圾收集是一个好主意吗


首先感谢您致电GC。Collect only计划垃圾收集。如果仍在引用某个内容,则仍不会收集该内容

至于你的回答,我相信,一旦不再引用这些内容,就会收集到这些内容,这将要求完成委托,不再引用这些内容

因此,如果这是一个简单的用法,我相信委托完成后将被清理,这将允许清理列表


但是,您可能会陷入一个陷阱,匿名委托没有被清理,但我认为线程池应该处理这个问题。如果没有,那么您可能会感兴趣

非常感谢您的澄清。我希望ThreadPoolWorker能够正常工作。是的,我还认为捕获变量可以延长l1和l2的寿命,直到委托完成执行。。“不过不确定。”LewsTherin那么,至于捕获变量,它肯定会延长生命。这更多的是关于匿名委托是否需要清理。我不担心延长生命,但更多的是关于线程池长时间保留委托以及l1和l2。这会影响内存占用。是的。。。这可能取决于Threadpool是否决定重用WaitCallback对象?无论如何,听起来很有趣。。祝你好运P