声明变量输入/输出之间有什么区别吗?

时间:2011-01-25 12:32:42

标签: c# .net

  

可能重复:
  Declaring a variable inside or outside an foreach loop: which is faster/better?

大家好,

两个例子之间有什么区别或有没有?

Ex 1:

for (int i = 0; i < 2; i++)
{
    Thread newThread = new Thread( ... );
    newThread.Start();
}

前2:

Thread newThread;
for (int i = 0; i < 2; i++)
{
    newThread = new Thread( ... );
    newThread.Start();
}

他们的IL代码是相同的......

4 个答案:

答案 0 :(得分:3)

在第二个示例中,您可以使用newThread访问最后一个帖子,这在第一个示例中是不可能的。

另一个区别:第二个示例包含对最后一个线程的引用,因此当线程完成并且可以处理时,垃圾收集器无法释放内存。

new关键字分配内存,因此内存分配没有区别(请参阅this link)。

答案 1 :(得分:2)

唯一的区别是newThread变量的范围。

在第一个例子中,它只能在循环中访问;在第二个例子中,您也可以在循环后访问它。

尽可能地限制范围,因此如果只能在循环中访问它,请选择第一个,否则选择第二个。

答案 2 :(得分:2)

在第一个示例中,newThread仅限于循环内的范围。在第二个示例中,newThread存在于for循环

之外的范围内

如果你没有在循环之外的任何其他地方使用newThread,你应该在循环中声明它,这样你就可以清楚地知道你只是使用循环来产生线程。

答案 3 :(得分:1)

差异显然是变量的范围。

在第一个示例中,Thread实例在循环后将没有更多引用。

在第二个示例中,Thread实例在循环之后仍然会有一个引用,并且只在包含块结束时才会松开该引用。