Я пытаюсь найти наилучшее решение, чтобы предотвратить выделение слишком большого объема памяти при создании документа XML. Мне нужно создать довольно большой XML с меньшим количеством ресурсов (веб-служба должна обрабатывать сотни вызовов в секунду). Структура самого Xml не сильно меняется, однако данные постоянно меняются.
Мое текущее решение - XDocument и XElement (LINQ). Ниже приведен краткий пример того, что я делаю сегодня:
static Stream GetXml(string d1, string d2, string d3)
{
XElement x =
new XElement("myElement",
new XElement("myOtherElement1", d1),
new XElement("myOtherElement2", d2),
new XElement("myOtherElement3", d3));
// ... more XElement
// ... return Stream
}
Когда документ Xml становится слишком большим, создание экземпляра XDocument и многих сотен XElement становится очень дорогим, а количество вызовов в секунду уменьшается.
В настоящее время я думаю о создании какого-то механизма шаблонов, который бы просто передавал строки (XElement) без создания каких-либо объектов. Как бы Вы это сделали? Это то, что нужно сделать?
static Stream GetXml(string d1, string d2, string d3)
{
const string xml = @"
<myElement>
<myOtherElement1>{0}</myOtherElement1>
<myOtherElement2>{1}</myOtherElement2>
<myOtherElement3>{2}</myOtherElement3>
</myElement>";
// What's the best way to {0}, {1}, {2} without allocating
// objects and using as little RAM as possible. I cannot
// use string.Format since it allocates strings.
StreamWriter sw = new StreamWriter(stream);
sw.Write(xml);
}