C# 当不再需要变量时,将其设置为null

C# 当不再需要变量时,将其设置为null,c#,C#,假设我有一个Datatables数组,对于该数组中的每个Datatable,我将启动一个线程进行一些处理 class someclass() { private DataTable[] DataTableArray; someclass(DataTable sometable) { //divide sometable and distribute them to DataTableArray }

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

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?
        }
    }
class-someclass()
{
私有DataTable[]DataTableArray;
someclass(数据表sometable)
{
//划分sometable并将它们分发到DataTableArray
}
私有void startThreads()
{
对于(int i=0;iDownloader(DataTableArray[i]);
}
DataTableArray=null;//是否需要此行?
}
}
在my
startThreads()中

  • 启动所有线程后,我可以设置DataTableArray=null吗
  • 我想按值传递数据表,它们是按默认值传递的吗 值?,这就是为什么我要将其设置为null,因为不再需要该数组

  • NET运行时将处理不再需要的任何对象,您无需指定对象为null。你也不需要自己给垃圾收集器打电话,除非情况很糟糕


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

    每个人都会很快忽略这一点,但它实际上并非完全无用。大多数将对象设置为null的代码都会通过抖动优化器进行优化,而不是这个。因为它将字段设置为null,而不是局部变量

    在某些情况下,删除对数组的引用可以获得回报。尤其是当阵列较大时,超过21250个元素。将数组引用设置为null可以使其在正常情况下更早地被垃圾收集。当“someclass”对象被垃圾回收时


    在这种情况下,最好不要在数组中包含成千上万个元素,这会给线程池带来很大压力。因此,理想情况下,这将是一个微优化,其效果您永远不会注意到。

    为什么要这样做?有关参数是如何传递的,请参阅。@wRAR just learning;)可能重复的,我不确定“不推荐”部分,认为我完全同意“不必要”。