当变量不再需要时,将变量设置为空
问题描述:
假设我有一个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后
- ?
- 我想通过值传递的数据表,是由它们的值 传递默认?这就是为什么我想将它设置为null,因为数组不再需要
答
每个人都会很快地忽视这一点,但它并不是完全无用的。大部分将对象设置为null的代码都会被抖动优化器优化,而不是这个。因为它将字段设置为空,而不是本地变量。
有些情况下,将引用放到数组中可以得到回报。特别是当数组很大时,超过21250个元素。将数组引用设置为null,可以提前进行垃圾回收,比通常情况下要早。这是什么时候“someclass”对象被垃圾收集。
然后,在这个特定的情况下,你最好不要在数组中有成千上万的元素,这会给线程池带来很大的压力。所以理想情况下,这将是一个微不足道的优化,其效果你永远都不会注意到。
答
.NET运行库将部署不再需要任何对象,您不需要指定对象为空。除非在可怕的情况下,您也不需要自己致电垃圾收集器。
所以答案是否定的。这条线是没有必要的,在我看来,不推荐。
+0
我'我不确定'不推荐'的部分,我认为我完全同意没有必要。 – 2013-03-16 11:32:39
你为什么要这样做? – wRAR 2013-03-16 11:18:12
有关如何传递参数,请参阅http://pobox.com/~skeet/csharp/parameters.html。 – 2013-03-16 11:19:05
@wRAR刚刚学习;) – user1590636 2013-03-16 11:38:31