Dot-Net
VB.NET 是否優化了字元串文字的連接?
類似於這個問題,但是對於 VB.NET,因為我學會了這是一個語言的東西。
例如,編譯器是否知道翻譯
Dim s As String = “test” + “this” + “function”
到
Dim s As String = "test this function"從而避免字元串連接對性能的影響?
是的。它確實。我只測試了 VS 2008,但我強烈懷疑以前的版本也是如此。
VB.NET
Public Class Class1 Dim s As String = "test " + "this " + "function" Public Function test() As String Return s End Function End ClassIL - 注意字元串“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 }
是的,它確實!讓我們來測試一下。
由於 .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 中測試)但是,如果上面的程式碼是用單獨的語句編寫的:
Dim s As String = "A" s &= "B" s &= "C"沒有進行優化並且
String在執行時執行連接(性能成本)。這同樣適用於在執行時解析數據的單行語句(變數、屬性、方法)。使用下劃線 _ 將上述語句連接成單個語句以強制優化:
Dim s As String = "A" _ & "B" _ & "C" _如果您需要在標記之間換行,請使用
vbCrLf(compile-time) 常量來確保優化,因為 usingEnvironment.NewLine(run-time) 屬性不提供優化。希望這可以幫助您獲得性能優勢!