假设我有一个数据表数组,对于该数组中的每个数据表,我将启动一个线程来进行一些处理。
class someclass()
{
private DataTable[] DataTableArray;
someclass(DataTable sometable)
{
//divide sometable and distribute them to DataTableArray
}
private void startThreads()
{
for (int i = 0; i < DataTableArray.Count(); i++)
{
Task.Factory.StartNew(() => Downloader(DataTableArray[i]));
}
DataTableArray = null; //is this line necessary?
}
}
在startThreads()
答案 0 :(得分:1)
.NET运行时将处理不再需要的任何对象,您不需要指定对象为null。除非情况严峻,否则你也不需要自己打电话给垃圾收集者。
所以答案是否定的。这条线是没有必要的,在我看来,不推荐。
答案 1 :(得分:1)
每个人都很快就会忽视这一点,但实际上并没有完全没用。大多数将对象设置为null的代码都会被抖动优化器优化掉,而不是这个优化器。因为它将字段设置为null,而不是局部变量。
在某些极端情况下,删除对数组的引用可以获得回报。特别是当阵列很大时,超过21250个元素。将数组引用设置为null允许它比通常发生的更早地进行垃圾收集。这就是“someclass”对象被垃圾收集的时候。
然后,在这个特定的情况下,你最好不要在数组中有成千上万的元素,这会给线程池带来很大的压力。理想情况下,这将是一种微观优化,其影响你永远不会注意到。