2014-06-06 63 views
0

CODE1VB.Net初始化內部環路

while 
    dim number as integer = 0 
    'some code here 
end while 

CODE2

dim number as integer 
while 
    number = 0 
    'some code here 
end while 

是什麼在速度方面在代碼1和代碼2不同? 他們還有什麼不同? 使用什麼是最佳實踐?謝謝

+0

試試吧,找出來。 –

+0

如果這確實是您的系統性能瓶頸的地方,恭喜。但是,我嚴重懷疑它是。如果性能真的很重要,首先要設定目標,然後編寫清晰易懂的代碼。然後*衡量*表現。然後,如果它不符合目標,* profile *代碼找出瓶頸在哪裏,然後努力改善這些地方。 –

回答

3

在代碼1中,變量的作用域限制爲while -block。

在代碼2中,變量的作用域超出了while -block。例如,如果您在函數中定義了while塊,則變量的範圍就是整個函數。

你可以注意到的區別,如果您有多個塊中的同一個變量:

while 
    dim number as integer = 0 

    x = number // x is 0 
    number = 1 
end while 

while 
    dim number as integer = 0 

    x = number // x is 0 
end while 

此代碼是好的,在那裏爲以下

dim number as integer = 0 
while 
    x = number // x is 0 
    number = 1 
end while 

while 
    x = number // x is 1 
end while 

這兩種方法都很好。說到性能 - 不關心,如果你需要提高你的代碼的性能,你很可能需要觸摸不同的地方。這樣的事情通常被稱爲「微觀優化」。

說到練習,通常最好將變量定義爲儘可能接近它的使用。所以如果你只需要while循環中的變量(及其狀態),那麼在那裏定義它。如果您需要在while循環之後讀取值,請在外部定義它。如果您使用ReSharper這樣的工具,它甚至會建議將您的定義移動到內部作用域(這裏是while循環),如果將它放在外部並且以後不使用它。

+0

非常感謝您的解釋。 – Pantamtuy

0

你不應該在乎這兩者之間的速度差異。它會非常小(如果有的話!)。

其他區別?第二個代碼在while循環後可以訪問number,這可能是也可能不是你想要的。

一般規則:將變量保持在可能的最小範圍,這意味着如果您只需要循環內的變量,則將其聲明在循環中。如果你需要它的值在循環結束時被訪問,在循環之前聲明它。

+0

非常感謝您的解釋。 – Pantamtuy

2

兩種方法的速度應該沒有差別。編譯器會爲你優化這個。您可以使用Ildasm.exe檢查生成的IL代碼。

的「最佳實踐」是使用smallest possible scope,即代碼2