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

本文关键字:设置 null 变量 不再 | 更新日期: 2023-09-27 18:04:06

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

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?
        }
    }

in my startThreads()

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

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

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

在一些极端情况下,删除对数组的引用可以获得回报。当数组很大,超过21250个元素时尤其如此。将数组引用设置为null可以使其更早被垃圾收集,比正常情况更早。这是当" someeclass "对象被垃圾收集。

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

. net运行时将处理任何不再需要的对象,您不需要指定对象为空。也不需要自己调用垃圾回收器,除非在紧急情况下。

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