2011-01-25 111 views
0

可能重複:
Declaring a variable inside or outside an foreach loop: which is faster/better?聲明變量in/out之間有什麼區別嗎?

大家好,

兩個例子之間的區別是什麼或有什麼?

例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

yes @dtb提到了一個確切的愚蠢,並且有一個更準確的答案,說這兩個都編譯爲相同的IL,因此表達沒有區別。 – gideon 2011-01-25 12:39:49

+0

謝謝你的回答@dbt ... – ogun 2011-01-25 12:46:53

回答

3

在第二個例子,你可以用newThread訪問的最後一個線程,這在第一個例子中是不可能的。

還有一點不同:第二個例子保存對最後一個線程的引用,所以垃圾回收器在線程完成並且可以處置時不能釋放內存。

new關鍵字分配內存,因此內存分配沒有差異(請參閱this link)。

1

區別顯然是變量的範圍。

在第一個示例中,Thread實例在循環後將不再有引用。

在第二個示例中,Thread實例在循環後仍然有一個引用,並且僅在包含塊結束時纔會丟失該引用。

2

唯一的區別是newThread變量的範圍。

在第一個例子中,它只能從循環中訪問;在第二個例子中,你也可以在循環之後訪問它。

儘可能限制範圍,因此如果只能在循環中訪問,請選擇第一個,否則選擇第二個。

2

在第一個示例中,newThread僅限於循環內的範圍。在第二個示例中,newThread存在於for循環外部的作用域中

如果您沒有將newThread用於循環外的任何其他位置,則應在循環內聲明它,以便清楚地表明您只使用循環來產生線程。

相關問題