StringBuilder или XMLDocument? - PullRequest
3 голосов
/ 09 марта 2012

Я написал консольное приложение для получения некоторой информации с веб-сервера, преобразования ее в XML и сохранения.Я вручную создал XML (добавить строку, используя StringBuilder).Поскольку XML может быть очень большим, лучше ли использовать класс StringBuilder или XMLDocument и т. Д. В отношении памяти?Если быть точным, мой вопрос заключается в том, что если XML равен 10 МБ текста, эффективно ли использование памяти пространством имен StringBuilder.append("") или System.XML?

Я думаю, что более эффективным способом было бы использование StringBuilder, но сохранение XMLфайл на HD после каждой итерации и очистки объекта stringbuilder.Любые комментарии?Заранее спасибо.:)

Ответы [ 3 ]

10 голосов
/ 09 марта 2012

Ни; Я бы использовал XmlWriter:

using(var file = File.Create(path))
using(var writer = XmlWriter.Create(file))
{
  // write to writer here
}

Это избавляет от необходимости буферизовать много данных в памяти, как это делали бы и StringBuilder, и XmlDocument, и избегает всех проблем с кодировкой, с которыми вы столкнетесь, если создадите XML вручную (если честно, не очень хорошая идея) ).

5 голосов
/ 09 марта 2012

Я бы не стал создавать XML вручную, используя StringBuilder, слишком много места для ошибок (если это правильное экранирование строк).

Чтобы написать файл XML большего размера, вам следуетиспользуйте класс XmlWriter .

0 голосов
/ 09 марта 2012

Если у вас есть XSD для XML, я бы использовал xsd.exe Инструмент определения схемы XML , который может генерировать из него классы c #.
Из кода довольно легко сериализовать и десериализовать XML, поэтому вам не придется работать с длинными строками. Просто создайте свой класс и сохраните его как действительный текст XML.

...