2013-03-16 93 views
0

假設我有一個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

回答

1

每個人都會很快地忽視這一點,但它並不是完全無用的。大部分將對象設置爲null的代碼都會被抖動優化器優化,而不是這個。因爲它將字段設置爲空,而不是本地變量。

有些情況下,將引用放到數組中可以得到回報。特別是當數組很大時,超過21250個元素。將數組引用設置爲null,可以提前進行垃圾回收,比通常情況下要早。這是什麼時候「someclass」對象被垃圾收集。

然後,在這個特定的情況下,你最好不要在數組中有成千上萬的元素,這會給線程池帶來很大的壓力。所以理想情況下,這將是一個微不足道的優化,其效果你永遠都不會注意到。

1

.NET運行庫將部署不再需要任何對象,您不需要指定對象爲空。除非在可怕的情況下,您也不需要自己致電垃圾收集器。

所以答案是否定的。這條線是沒有必要的,在我看來,不推薦。

+0

我'我不確定'不推薦'的部分,我認爲我完全同意沒有必要。 – 2013-03-16 11:32:39