当前位置:  开发笔记 > 编程语言 > 正文

VB.NET是否优化了字符串文字的串联?

如何解决《VB.NET是否优化了字符串文字的串联?》经验,为你挑选了2个好方法。

与此问题类似,但对于VB.NET,因为我了解到这是一种语言问题.

例如,编译器是否知道要翻译

Dim s As String ="test"+"this"+"function"

Dim s As String = "test this function"

从而避免字符串连接的性能损失?



1> Jason Hernan..:

是.它确实.我只测试了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

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 
}



2> Paulius Pask..:

是的,它确实!让我们去测试.

由于.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" 

生成以下IL指令:

L_0008: ldstr "ABC"

这清楚地证明编译器正在优化String文字串联(在ildasm.exe中测试)

但是,如果代码obove写在单独的语句中:

Dim s As String = "A"
s &= "B"
s &= "C" 

没有进行优化,并且String在运行时执行连接(性能开销).同样适用于在运行时解析数据的单行语句(变量,属性,方法).

使用下划线_将上述语句连接到单个语句中以强制优化:

Dim s As String = "A" _
& "B" _
& "C" _

如果你需要令牌之间的新行使用vbCrLf(编译时)常量来确保优化,因为使用Environment.NewLine(运行时)属性不提供优化.

希望这有助于您获得性能优势!

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有