C#加速大型XML生成

时间:2016-11-07 22:34:40

标签: c# xml

我正在编写一个C#实用程序来生成一个大型XML SOAP请求,以将产品及其属性列表发送到第三方应用程序,该应用程序需要以特定方式使用XML。每个产品都有大约30个XML标签。无法更改XML架构或转换为JSON。

我正在处理大约3000种产品,在我的测试机器上大约需要25秒。这些产品将来会增加不同的时间。

有没有办法加快XML生成过程?我主要在循环中使用XmlDocument的CreateElement和CreateAttribute(对于具有属性的节点),然后将最终文档转换为字符串,以作为HTTP请求发送到本地部署的第三方应用程序。

感谢。

3 个答案:

答案 0 :(得分:1)

速度是您的主要考虑因素,请勿使用XmlDocument类提供的XML DOM,而是使用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();
    }
}

答案 1 :(得分:0)

如果您正在创建Xml,那么请尝试使用XmlWriter,因为它使用的内存较少。

答案 2 :(得分:0)

MSDN有以下评论:

  

<强> XmlDocument的即可。 XmlDocument 类是内存或缓存树   表示XML文档。您可以使用它来编辑和导航   该文件。虽然 XmlDocument 易于使用,但它非常适合   资源密集型。您通常应使用 XmlReader XmlWriter   为了更好的表现。

后来作者似乎主要关注内存消耗,如果内存必须交换到磁盘,这只会导致性能问题。 30k项目似乎不足以耗尽4 GB RAM,但这取决于其他资源需求(数据库是否正在运行?)。作者似乎建议std::vector<some_type>类用于小数据集;读者/作者类可以更好地处理大量数据,可能与使用XmlDocument编辑它的一小部分相结合。

对于您的问题,这篇文章通常看起来很好。