在 Select 案例中优化 For...Next 循环
Optimising For...Next loops in Select Case
我在一段代码中有三个不同的 CASE
,每个代码都围绕着 For...Next
循环的例程进行了细微的变化。问题是,根据我嵌套的方式,效率和速度有什么不同吗?
换句话说就是:
Select Case sPosition
Case Is = "First"
For j = 17 to 65
[Do stuff]
Next j
Case Is = "Middle"
For j = 17 to 65
[Do stuff]
Next j
Case Is = "Last"
For j = 17 to 65
[Do stuff]
Next j
End Select
...效率高于或低于:
For j = 17 to 65
Select Case sPosition
Case Is = "First"
[Do stuff]
Case Is = "Middle"
[Do stuff]
Case Is = "Last"
[Do stuff]
End Select
Next j
我认为第一个变体更有效,因为 select case 只工作一次,而在第二个变体中 select case 对 cicle 的每一步都有效(49 次)
与 SO 相比,CodeReview 的问题更多,但无论如何,这取决于您打算如何处理循环。在第一种情况下,你有一个条件,然后你根据条件的结果循环遍历数据,对所有数据做同样的事情。在第二种情况下,您在每次循环运行时重新检查条件。如果您认为循环运行时会发生不同的事情(选择不同的案例),那么您需要使用第二个变体,但如果检查的条件没有改变,那么第一个选项会更快,因为条件只是检查一次循环
我在一段代码中有三个不同的 CASE
,每个代码都围绕着 For...Next
循环的例程进行了细微的变化。问题是,根据我嵌套的方式,效率和速度有什么不同吗?
换句话说就是:
Select Case sPosition
Case Is = "First"
For j = 17 to 65
[Do stuff]
Next j
Case Is = "Middle"
For j = 17 to 65
[Do stuff]
Next j
Case Is = "Last"
For j = 17 to 65
[Do stuff]
Next j
End Select
...效率高于或低于:
For j = 17 to 65
Select Case sPosition
Case Is = "First"
[Do stuff]
Case Is = "Middle"
[Do stuff]
Case Is = "Last"
[Do stuff]
End Select
Next j
我认为第一个变体更有效,因为 select case 只工作一次,而在第二个变体中 select case 对 cicle 的每一步都有效(49 次)
与 SO 相比,CodeReview 的问题更多,但无论如何,这取决于您打算如何处理循环。在第一种情况下,你有一个条件,然后你根据条件的结果循环遍历数据,对所有数据做同样的事情。在第二种情况下,您在每次循环运行时重新检查条件。如果您认为循环运行时会发生不同的事情(选择不同的案例),那么您需要使用第二个变体,但如果检查的条件没有改变,那么第一个选项会更快,因为条件只是检查一次循环