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不同? 他們還有什麼不同? 使用什麼是最佳實踐?謝謝
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不同? 他們還有什麼不同? 使用什麼是最佳實踐?謝謝
在代碼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
循環),如果將它放在外部並且以後不使用它。
非常感謝您的解釋。 – Pantamtuy
你不應該在乎這兩者之間的速度差異。它會非常小(如果有的話!)。
其他區別?第二個代碼在while
循環後可以訪問number
,這可能是也可能不是你想要的。
一般規則:將變量保持在可能的最小範圍,這意味着如果您只需要循環內的變量,則將其聲明在循環中。如果你需要它的值在循環結束時被訪問,在循環之前聲明它。
非常感謝您的解釋。 – Pantamtuy
兩種方法的速度應該沒有差別。編譯器會爲你優化這個。您可以使用Ildasm.exe檢查生成的IL代碼。
的「最佳實踐」是使用smallest possible scope,即代碼2
試試吧,找出來。 –
如果這確實是您的系統性能瓶頸的地方,恭喜。但是,我嚴重懷疑它是。如果性能真的很重要,首先要設定目標,然後編寫清晰易懂的代碼。然後*衡量*表現。然後,如果它不符合目標,* profile *代碼找出瓶頸在哪裏,然後努力改善這些地方。 –