在以下代码中:
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?
}));
//..
}
l1和l2是Thread本地非常大的列表。他们什么时候有资格进行垃圾收集?当线程完成执行块时,它们是否符合条件?
当线程完成后,强制执行l1和l2的垃圾收集是个好主意吗?
感谢
答案 0 :(得分:4)
首先,调用GC.Collect只调度垃圾收集。如果某些内容仍被引用,则仍然无法收集。
至于你的答案,我相信这些将在不再被引用时收集,这将要求代表完成而不再被引用。
因此,如果它是一个简单的用法,我相信代表将在完成后清理,然后将清理列表
但是,您可能会陷入匿名委托未被清理的陷阱,但我认为ThreadPool应该处理这个问题。如果没有,那么您可能会对this SO, especially Rory's answer
感兴趣