2012-08-28 49 views
2

我用StringBuilder有很多VB代碼。我正在考慮將它們更改爲XML Litterals,關於性能是否比StringBuilder更快?或者它更慢?性能方面的VB.NET XML文字與StringBuilder

這是XML文本的例子:

Dim bookString = <bookstore xmlns="http://examples.books.com"> 
         <book publicationdate=<%= publicationdate %> ISBN=<%= isbn %>> 
          <title>ASP.NET Book</title> 
          <price><%= price %></price> 
          <author> 
           <first-name><%= a.FirstName %></first-name> 
           <last-name><%= a.LastName %></last-name> 
          </author> 
         </book> 
        </bookstore>.Value 

這是使用的StringBuilder的一個例子:

Dim stringBuilder = new StringBuilder() 

stringBuilder.Append("<bookstore xmlns="http://examples.books.com">") 
stringBuilder.Append("<book publicationdate=<%= publicationdate %> ISBN=<%= isbn %>>") 
stringBuilder.Append("<title>ASP.NET Book</title>") 
stringBuilder.Append("<price><%= price %></price>") 
stringBuilder.Append("<author>") 
stringBuilder.Append("<first-name><%= a.FirstName %></first-name>") 
stringBuilder.Append("<last-name><%= a.LastName %></last-name>") 
stringBuilder.Append("</author>") 
stringBuilder.Append("</book>") 
stringBuilder.Append("</bookstore>") 

Dim bookString = stringBuilder.toString() 

回答

4

您應該使用XML文本只是爲了確保你的代碼是正確的。
如果您使用StringBuilder,則很可能忘記轉義某些內容並生成無效的XML。

XML文字可能會比純字符串慢一點,但它應該沒有太大的區別。

如果您正在處理大量文件,您應該使用直接寫入磁盤或網絡的XmlWriter;這應該比任何一個都快。

請注意,在您的具體示例中,普通字符串連接會比StringBuilder快。 (因爲你沒有使用任何循環)

+0

爲什麼你說普通字符串連接會比字符串生成器快。當然,對於這樣一個小字符串,它不會有太大的不同,但是,每個字符串連接都會爲它自己的內部字符數組分配一個全新的字符串對象。但是,我認爲StringBuilder的Append方法偶爾會重新分配內部數組,這就是爲什麼它被推薦。我不明白有或沒有循環改變了這一點。 –

+2

@SteveDog:錯了。像'「a」+「b」+ someVar +「c」'這樣的表達式被編譯爲'String.Concat(「ab」,someVar「,」c「)'。 – SLaks

+0

有意思。 –

2

從純粹的性能角度來看,最好的選擇是測試兩種選擇。除了已經提到的其他選項之外,您可能需要考慮XStreamingElement將Xml Literals(與字符串連接/字符串構建器相比)的類型安全性與輸出流一起使用,以限制內存開銷。有關XStreamingElement的信息,請參閱http://msdn.microsoft.com/en-us/library/system.xml.linq.xstreamingelement.aspx