可能重复:
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代码是相同的......
答案 0 :(得分:3)
在第二个示例中,您可以使用newThread
访问最后一个帖子,这在第一个示例中是不可能的。
另一个区别:第二个示例包含对最后一个线程的引用,因此当线程完成并且可以处理时,垃圾收集器无法释放内存。
new
关键字分配内存,因此内存分配没有区别(请参阅this link)。
答案 1 :(得分:2)
唯一的区别是newThread
变量的范围。
在第一个例子中,它只能在循环中访问;在第二个例子中,您也可以在循环后访问它。
尽可能地限制范围,因此如果只能在循环中访问它,请选择第一个,否则选择第二个。
答案 2 :(得分:2)
在第一个示例中,newThread
仅限于循环内的范围。在第二个示例中,newThread
存在于for循环
如果你没有在循环之外的任何其他地方使用newThread
,你应该在循环中声明它,这样你就可以清楚地知道你只是使用循环来产生线程。
答案 3 :(得分:1)
差异显然是变量的范围。
在第一个示例中,Thread
实例在循环后将没有更多引用。
在第二个示例中,Thread
实例在循环之后仍然会有一个引用,并且只在包含块结束时才会松开该引用。