所以我在浏览MSDN的文档后看到了更快的数组实现,所以我摆弄(请不要拍我)。
https://msdn.microsoft.com/en-us/library/h63fsef3.aspx这表明:
在声明和初始化基本数据类型数组时使用{}语法。 >例如,使用以下语法:
Dim letters5() As String = {"a", "b", "c"}
请勿使用以下语法:
Dim letters6(2) As String letters6(0) = "a" letters6(1) = "b" letters6(2) = "c"`
据我所知,这篇文章是在编码约定的上下文中编写的,并不一定是为了编写速度/效率,但假设我在我的dotnetfiddle中正确测试,Microsoft提示你不使用的后一种语法更快,正确的吗?
答案 0 :(得分:2)
有趣。看看LINQPad中生成的IL(不知道这与普通编译相比如何 - 我认为它是相同的,但可能是错误的),IL用于初始化数组的两种方式略有不同。
Dim letters5() As String = {"a", "b", "c"}
IL_0000: ldc.i4.3
IL_0001: newarr System.String
IL_0006: stloc.1 // VB$LW$t_array$S0
IL_0007: ldloc.1 // VB$LW$t_array$S0
IL_0008: ldc.i4.0
IL_0009: ldstr "a"
IL_000E: stelem.ref
IL_000F: ldloc.1 // VB$LW$t_array$S0
IL_0010: ldc.i4.1
IL_0011: ldstr "b"
IL_0016: stelem.ref
IL_0017: ldloc.1 // VB$LW$t_array$S0
IL_0018: ldc.i4.2
IL_0019: ldstr "c"
IL_001E: stelem.ref
IL_001F: ldloc.1 // VB$LW$t_array$S0
IL_0020: stloc.0 // letters5
IL_0021: ret
VS
Dim letters6(2) As String
letters6(0) = "a"
letters6(1) = "b"
letters6(2) = "c"
IL_0000: ldc.i4.3
IL_0001: newarr System.String
IL_0006: stloc.0 // letters6
IL_0007: ldloc.0 // letters6
IL_0008: ldc.i4.0
IL_0009: ldstr "a"
IL_000E: stelem.ref
IL_000F: ldloc.0 // letters6
IL_0010: ldc.i4.1
IL_0011: ldstr "b"
IL_0016: stelem.ref
IL_0017: ldloc.0 // letters6
IL_0018: ldc.i4.2
IL_0019: ldstr "c"
IL_001E: stelem.ref
IL_001F: ret
第一个版本似乎为数组创建了一个临时变量,并将引用复制到实际变量,这需要两个额外的指令。所以,它似乎效率较低,但我认为更好的代码在正常使用中是值得的权衡。