2

我有很多带有 StringBuilder 的 VB 代码。我正在考虑将它们更改为 XML Litterals,关于性能是否比 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

2 回答 2

4

您应该使用 XML 文字来确保您的代码是正确的。
如果您使用StringBuilder,您很可能会忘记转义某些内容并生成无效的 XML。

XML 文字可能会比纯字符串慢一点,但应该不会有太大区别。

如果您正在处理巨大的文件,您应该使用XmlWriter直接写入磁盘或网络的文件;这应该比任何一个都快。

请注意,在您的具体示例中,普通字符串连接会比 StringBuilder 更快。(因为您没有使用任何循环)

于 2012-08-28T14:57:15.747 回答
2

从纯粹的性能角度来看,最好的选择是测试这两种选择。除了已经提到的其他选项之外,您可能需要考虑 XStreamingElement 将 Xml Literals 的类型安全(与字符串连接/字符串构建器相比)与输出流结合起来以限制内存开销。有关 XStreamingElement 的信息,请参阅http://msdn.microsoft.com/en-us/library/system.xml.linq.xstreamingelement.aspx

于 2012-08-28T17:49:10.067 回答