当变量不再需要时,将变量设置为空

问题描述:

假设我有一个Datatables数组,对于数组中的每个Datatable,我将启动一个Thread来执行一些处理。当变量不再需要时,将变量设置为空

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

    开始的所有线程我可以设置DataTableArray = NULL后
  1. 我想通过值传递的数据表,是由它们的值 传递默认?这就是为什么我想将它设置为null,因为数组不再需要
+2

你为什么要这样做? – wRAR 2013-03-16 11:18:12

+1

有关如何传递参数,请参阅http://pobox.com/~skeet/csharp/parameters.html。 – 2013-03-16 11:19:05

+0

@wRAR刚刚学习;) – user1590636 2013-03-16 11:38:31

每个人都会很快地忽视这一点,但它并不是完全无用的。大部分将对象设置为null的代码都会被抖动优化器优化,而不是这个。因为它将字段设置为空,而不是本地变量。

有些情况下,将引用放到数组中可以得到回报。特别是当数组很大时,超过21250个元素。将数组引用设置为null,可以提前进行垃圾回收,比通常情况下要早。这是什么时候“someclass”对象被垃圾收集。

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

.NET运行库将部署不再需要任何对象,您不需要指定对象为空。除非在可怕的情况下,您也不需要自己致电垃圾收集器。

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

+0

我'我不确定'不推荐'的部分,我认为我完全同意没有必要。 – 2013-03-16 11:32:39