VB.NET XML Literals против StringBuilder с точки зрения производительности

У меня есть много кода VB с StringBuilder. Я подумываю об их замене на 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()

2 ответа

Решение

Вы должны использовать литералы XML просто для того, чтобы убедиться, что ваш код правильный.
Если вы используете StringBuilderвы, скорее всего, забудете что-то избежать и сгенерировать неверный XML.

XML-литералы, вероятно, будут немного медленнее, чем чистые строки, но это не должно иметь большого значения.

Если вы имеете дело с огромными файлами, вы должны использовать XmlWriter записывает напрямую на диск или в сеть; это должно быть быстрее, чем любой.

Обратите внимание, что в вашем конкретном примере обычная конкатенация строк будет быстрее, чем StringBuilder. (поскольку вы не используете петли)

С точки зрения производительности, лучший вариант - протестировать обе альтернативы. В дополнение к другим уже упомянутым опциям вы можете рассмотреть возможность использования XStreamingElement для обеспечения безопасности типов литералов Xml (по сравнению с конкатенацией строк / строителями строк) вместе с потоковой передачей выходных данных для ограничения накладных расходов памяти. См. Http://msdn.microsoft.com/en-us/library/system.xml.linq.xstreamingelement.aspx для получения информации о XStreamingElement.

Другие вопросы по тегам