當我將對象值連接在一起以在VB.NET中形成字符串時,是否存在性能差異或使用&
concat或+
之間的建議最佳做法連接每個對象的調用.ToString()
?ToString()和&concatenation之間的最佳實踐或性能差異
實施例(這是更快或最佳實踐):
Dim result1 As String = 10 & "em"
Dim result2 As String = 10.ToString() + "em"
當我將對象值連接在一起以在VB.NET中形成字符串時,是否存在性能差異或使用&
concat或+
之間的建議最佳做法連接每個對象的調用.ToString()
?ToString()和&concatenation之間的最佳實踐或性能差異
實施例(這是更快或最佳實踐):
Dim result1 As String = 10 & "em"
Dim result2 As String = 10.ToString() + "em"
沒有性能差異。如果您明確省略了.ToString()
調用,編譯器將基本上爲您填寫。如果您使用Option Explicit,則需要調用該方法,否則您將收到編譯錯誤。我聽說選擇&和+語義的理由很充分,所以選擇真的取決於你。
我從來沒有試過,也沒有看到兩者之間的性能測試,我懷疑是真的有速度差異。我覺得使用第一個選項是更好的做法,因爲推斷了.ToString()。讓語言像你在動態語言中一樣隱藏你的細節。
字符串是不可變的 - 意味着每次操縱字符串時都會創建一個字符串對象的新實例。
在這些情況下,要獲得更好的性能(和一般最佳實踐),請使用StringBuilder
類的System.Text
。
在你的榜樣(我是一個C#編碼器,所以道歉,如果我的VB相當於是不正確的)
Dim result As StringBuilder() = new StringBuilder()
result.Append("10")
result.Append("em")
Dim resultString As String = result.ToString()
只有當你調用StringBuilder
對象的.ToString()
方法是創建的字符串的一個實例。
您應該習慣使用StringBuilder
作爲最佳做法。
這取決於有多少串連接。 – 2010-06-02 04:49:11
在這種情況下,'StringBuilder'會比連接字符串慢... – porges 2010-06-02 04:49:45
你也可以使用string.concat(str1,str2,str3,str4)。這是一個重載的函數,並且需要2-4個字符串參數。使用3或4個字符串進行連接時,它是最快的選擇,因爲它可以在一個操作中執行連接,從而節省性能,因爲字符串是不可變的。
一旦你打到〜10 +字符串,你應該使用RPM1984建議的stringbuilder類。
否則,我建議使用'&'進行字符串連接。它可以避免混淆,因爲'+'可以很容易地被整數運算混淆。
你的意思是在你的第二個例子中使用'+',即'Dim result2 As String = 10.ToString()+「em」'? – jball 2010-06-01 23:44:41
我一直使用&來拼接。恕我直言,只是令人困惑。如果你正在做很多字符串操作,請使用stringbuilder。 – dbasnett 2010-06-01 23:50:28
錯誤修正,謝謝@jball – slolife 2010-06-02 00:18:50