【发布时间】:2011-12-02 06:31:13
【问题描述】:
我正在尝试寻找最佳解决方案,以防止我们在构建 Xml 文档时分配过多内存。我必须用尽可能少的资源构建一个相当大的 Xml(Web 服务必须能够每秒处理数百个调用)。 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);
}
【问题讨论】:
标签: c# xml performance linq memory-efficient