将不再需要的变量设置为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()
- 启动所有线程后,我可以设置DataTableArray = null吗?
- 我想通过值传递数据表,它们通过默认值价值吗?,这就是为什么我要将其设置为null,因为该数组不再需要
每个人都很快忽略了这一点,但它实际上并非完全无用。大多数将对象设置为null的代码都被抖动优化器优化掉了,而不是这个。因为它将字段设置为null,而不是局部变量。
在一些极端情况下,删除对数组的引用可以获得回报。当数组很大,超过21250个元素时尤其如此。将数组引用设置为null可以使其更早被垃圾收集,比正常情况更早。这是当" someeclass "对象被垃圾收集。
然后,在这个特定的情况下,你最好不要在数组中有成千上万的元素,那将给线程池带来很大的压力。因此,理想情况下,这将是一个微优化,其效果你永远不会注意到。. net运行时将处理任何不再需要的对象,您不需要指定对象为空。也不需要自己调用垃圾回收器,除非在紧急情况下。
所以答案是否定的。这条线是没有必要的,在我看来,也不推荐。