CODE1
while
dim number as integer = 0
'some code here
end while
码2
dim number as integer
while
number = 0
'some code here
end while
代码1和代码2在速度方面有何不同? 他们还有什么区别? 使用的最佳做法是什么?谢谢
答案 0 :(得分:4)
在代码1中,变量的范围被约束为while
- 块。
在代码2中,变量的范围超出了while
- 块。例如,如果在函数中定义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
循环),如果您将其放在外面并且之后不使用它。
答案 1 :(得分:2)
两种方法的速度应该没有区别。编译器会为您优化这一点。您可以使用IL检查生成的Ildasm.exe代码。
"最佳实践"是使用smallest possible scope,即代码2。
答案 2 :(得分:0)
你不应该关心这两者之间的速度差异。它会非常小(如果有的话)。
其他差异?第二个代码会在number
循环后访问while
,这可能是您想要的,也可能不是。
一般规则:将变量保持在尽可能小的范围内,这意味着如果您只需要循环内的变量,则在循环内声明它。如果你需要在循环结束时可以访问它的值,请在循环之前声明它。