为了说明目的,我编写了两个函数。你能告诉我哪一个更好练习吗?
Test2是否更适合性能,因为它需要声明更少的变量,因此可能会在系统上使用更少的内存?
Function Test1()
Dim PerformMethod_A As Boolean = True
Dim a = 1
Dim b = 2
Dim c = 3
Dim d = 4
Dim e = 5
Dim result
If PerformMethod_A Then
result = a + b
Else
result = c + d + e
End If
Return result
End Function
Function Test2()
Dim PerformMethod_A As Boolean = True
Dim result
If PerformMethod_A Then
Dim a = 1
Dim b = 2
result = a + b
Else
Dim c = 3
Dim d = 4
Dim e = 5
result = c + d + e
End If
Return result
End Function
答案 0 :(得分:2)
此时您正在执行 micro 性能增强功能。根据您所描述的问题陈述,两种方式都没有明显的区别。如果您在性能方面遇到问题,则需要先收集指标,以便了解要调整的 。
阅读Eric Lippert的these articles,他们会指导你。
答案 1 :(得分:1)
如果你看一下IL中编译的内容,你会发现它并没有真正有所作为。所有局部变量实际上都在IL的方法顶部声明,无论它们在源中声明的位置。
测试1:
// Method begins at RVA 0x2054
// Code size 59 (0x3b)
.maxstack 2
.locals init (
[0] int32 a,
[1] int32 b,
[2] int32 c,
[3] int32 d,
[4] int32 e,
[5] bool PerformMethod_A,
[6] object result,
[7] object Test1,
[8] bool VB$CG$t_bool$S0
)
的Test2:
// Method begins at RVA 0x209c
// Code size 58 (0x3a)
.maxstack 2
.locals init (
[0] bool PerformMethod_A,
[1] object result,
[2] object Test2,
[3] int32 a,
[4] int32 b,
[5] int32 c,
[6] int32 d,
[7] int32 e,
[8] bool VB$CG$t_bool$S0
)