我有三个条件要比较。哪两个在以下两个之间更快?请指出我。谢谢大家!
If var = 1 then
Command for updating database
ElseIf var = 2 then
Command for updating database
ElseIf var = 3 then
Command for updating database
EndIf
和
Select Case var
Case 1
Command for updating database
Case 2
Command for updating database
Case 3
Command for updating database
End Select
答案 0 :(得分:13)
如果您编译这两个片段并使用反射器进行反汇编,您将看到它们最终都与IL实际上相同。编译器将if / else
替换为case
语句。
如果遇到性能问题,这种微优化很可能无法帮助您。
如果您遇到性能问题,那么您需要对程序进行概要分析并找出瓶颈所在。
如果您没有遇到性能问题,请不要再出汗,并担心编写易于理解的代码。
答案 1 :(得分:10)
理论上,switch..case
应该更快,因为它是一个查找表(通常由编译器实现)。
但是,如果您担心哪些运行速度更快,而且确实是您计划中的瓶颈,那么您的项目就会非常出色。
答案 2 :(得分:8)
数据库操作的速度至少比if/else
或case
语句慢1000倍。
通常,case语句可以更快地执行,因为编译器或运行时可以构建跳转表。通常,对于少于五个项目,编译器会将case语句编写为if / else语句列表。如果上面的性能是可测量的,我猜测性能将是相同的,因为可能正在执行相同的指令。
MSIL有一个特定的OpCode for switch语句。人们不得不反编译成MSIL,看看VB.Net是否会为三个项目创建一个跳转表。
答案 3 :(得分:4)
最终回答此类问题的最佳方法是使用基准。
将每个操作放在执行10,000次的循环中,记录循环前后的系统时间,从结束时间中减去开始时间并比较每种方法的结果。