不再需要时将变量设置为null

时间:2013-03-16 11:17:01

标签: c#

假设我有一个数据表数组,对于该数组中的每个数据表,我将启动一个线程来进行一些处理。

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()

  1. 启动所有线程后,我可以设置DataTableArray = null?
  2. 我希望按值传递Datatables,它们是否传递Default 值?,这就是为什么我想将它设置为null,因为不再需要该数组

2 个答案:

答案 0 :(得分:1)

.NET运行时将处理不再需要的任何对象,您不需要指定对象为null。除非情况严峻,否则你也不需要自己打电话给垃圾收集者。

所以答案是否定的。这条线是没有必要的,在我看来,不推荐。

答案 1 :(得分:1)

每个人都很快就会忽视这一点,但实际上并没有完全没用。大多数将对象设置为null的代码都会被抖动优化器优化掉,而不是这个优化器。因为它将字段设置为null,而不是局部变量。

在某些极端情况下,删除对数组的引用可以获得回报。特别是当阵列很大时,超过21250个元素。将数组引用设置为null允许它比通常发生的更早地进行垃圾收集。这就是“someclass”对象被垃圾收集的时候。

然后,在这个特定的情况下,你最好不要在数组中有成千上万的元素,这会给线程池带来很大的压力。理想情况下,这将是一种微观优化,其影响你永远不会注意到。