2016-11-07 3 views
1

Я пишу утилиту C# для создания большого XML-запроса SOAP для отправки списка продуктов и их атрибутов стороннему приложению, которое ожидает XML в определенном виде. Каждый продукт имеет около 30 тегов XML. Невозможно изменить схему XML или преобразовать в JSON.C# ускорение большого генерации XML

Я обрабатываю около 3000 продуктов, что примерно занимает 25 секунд на моей тестовой машине. В будущем продукты будут многократно увеличиваться.

Есть ли способ ускорить процесс генерации XML? В основном я использую CreateElement XmlDocument и CreateAttribute (для узлов с атрибутами), внутри цикла, а затем скрывает окончательный документ до строки, чтобы отправить в качестве HTTP-запроса локально развернутому стороннему приложению.

Спасибо.

+0

Вы можете использовать Linq To XML. 25 секунд для 3000 * 30 тегов. –

+0

Я тестировал, сохраняя XML в файл. Размер файла составляет около 4 МБ. Я тестирую это на Core i3, Win 7 64-bit OS, 4 GB RAM. – AllSolutions

+3

Покажите нам свой код. –

ответ

0

Если вы создаете Xml, попробуйте перейти к XmlWriter, поскольку он использует меньше памяти.

1

я скорость является главной заботой, не использовать XML DOM, как это предусмотрено в XmlDocument класса, используйте XmlWriter вместо:

using System; 
using System.Text; 
using System.Xml; 

class Program 
{ 
    static void Main(string[] args) 
    { 
     XmlWriter xmlWriter = XmlWriter.Create("foo.xml"); 

     xmlWriter.WriteStartDocument(); 
     xmlWriter.WriteStartElement("root"); 

     xmlWriter.WriteStartElement("someElement"); 
     xmlWriter.WriteAttributeString("anAttribute", "42"); 
     xmlWriter.WriteString("Node Content"); 
     xmlWriter.WriteEndElement(); 

     xmlWriter.WriteStartElement("someElement"); 
     xmlWriter.WriteAttributeString("anAttribute", "39"); 
     xmlWriter.WriteString("Node Content"); 

     xmlWriter.WriteEndDocument(); 
     xmlWriter.Close(); 
    } 
} 
0

MSDN имеет следующий комментарий:

XmlDocument. Класс XmlDocument является вложенным в память или кэшированным деревом представлением XML-документа. Вы можете использовать его для редактирования и навигации по документа. В то время как XmlDocument прост в использовании, очень ресурсоемкий. Вы должны обычно использовать XmlReader и XmlWriter для лучшей производительности.

Позже автор, по-видимому, в первую очередь обеспокоен потреблением памяти, которое должно привести только к проблемам с производительностью, если память должна быть заменена на диск. 30 тыс. Штук недостаточно, чтобы выпустить 4 ГБ ОЗУ, но это зависит от других богов ресурсов (работает ли база данных?). Автор полагает, что класс XmlDocument предназначен для небольших наборов данных; большие объемы данных лучше обрабатываются классами читателя/писателя, возможно, в сочетании с использованием XmlDocument для редактирования небольших его частей.

Статья, как правило, хорошо читает вашу проблему.

Смежные вопросы