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.