我正在编写一个C#实用程序来生成一个大型XML SOAP请求,以将产品及其属性列表发送到第三方应用程序,该应用程序需要以特定方式使用XML。每个产品都有大约30个XML标签。无法更改XML架构或转换为JSON。
我正在处理大约3000种产品,在我的测试机器上大约需要25秒。这些产品将来会增加不同的时间。
有没有办法加快XML生成过程?我主要在循环中使用XmlDocument的CreateElement和CreateAttribute(对于具有属性的节点),然后将最终文档转换为字符串,以作为HTTP请求发送到本地部署的第三方应用程序。
感谢。
答案 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
编辑它的一小部分相结合。
对于您的问题,这篇文章通常看起来很好。