Lar*_*nal 9 .net vb.net optimization performance
与此问题类似,但对于VB.NET,因为我了解到这是一种语言问题.
例如,编译器是否知道要翻译
Dim s As String ="test"+"this"+"function"
至
Dim s As String = "test this function"
Run Code Online (Sandbox Code Playgroud)
从而避免字符串连接的性能损失?
Jas*_*dez 11
是.它确实.我只测试了VS 2008,但我强烈怀疑以前的版本也是如此.
VB.NET
Public Class Class1
Dim s As String = "test " + "this " + "function"
Public Function test() As String
Return s
End Function
End Class
Run Code Online (Sandbox Code Playgroud)
IL - 注意字符串"test this function"
{
.maxstack 8
L_0000: ldarg.0
L_0001: call instance void [mscorlib]System.Object::.ctor()
L_0006: nop
L_0007: ldarg.0
L_0008: ldstr "test this function"
L_000d: stfld string ClassLibrary1.Class1::s
L_0012: nop
L_0013: ret
}
Run Code Online (Sandbox Code Playgroud)
是的,它确实!让我们去测试.
由于.NET将所有托管语言(VB,C#,C++)编译为IL(中间语言)指令,并且String类型是CLS(公共语言规范)的一部分,所有.NET Framework版本:String2.0,3.0,3.5,4.0都将文字串联优化为编译过程的一部分.
例如下面的VB.NET代码:
Dim s As String = "A" & "B" & "C"
Run Code Online (Sandbox Code Playgroud)
生成以下IL指令:
L_0008: ldstr "ABC"
Run Code Online (Sandbox Code Playgroud)
这清楚地证明编译器正在优化String文字串联(在ildasm.exe中测试)
但是,如果代码obove写在单独的语句中:
Dim s As String = "A"
s &= "B"
s &= "C"
Run Code Online (Sandbox Code Playgroud)
没有进行优化,并且String在运行时执行连接(性能开销).同样适用于在运行时解析数据的单行语句(变量,属性,方法).
使用下划线_将上述语句连接到单个语句中以强制优化:
Dim s As String = "A" _
& "B" _
& "C" _
Run Code Online (Sandbox Code Playgroud)
如果你需要令牌之间的新行使用vbCrLf(编译时)常量来确保优化,因为使用Environment.NewLine(运行时)属性不提供优化.
希望这有助于您获得性能优势!
| 归档时间: |
|
| 查看次数: |
2069 次 |
| 最近记录: |