有没有办法使xdocumentsave更快?

本文关键字:更快 xdocumentsave 有没有 | 更新日期: 2023-09-27 18:18:05

我正在尝试使用XDocument将xml写入文件。以前我用FileStream写一个文本文件,它以前工作得很快。

使用分析器,我发现xdocument。节省大约90%的时间,特别是当我在xml节点中编写大文本时。

XDocument xDocument = XDocument.Load(FilePath);
            XElement root = xDocument.Element("logs");
            root.Add(
                     new XElement(
                         "log",
                         new XElement(
                             "dt",
                             DateTime.Now.ToString("MMM dd, yyyy")),
                         new XElement(
                             "tm",
                             DateTime.Now.ToString("HH:mm:ss.fff")),
                        new XElement(
                            "st",
                            ConvertStackTrace(stackList)
                            //stackInfo
                            ),
                         new XElement(
                             "t",
                             topic),
                         new XElement(
                             "d",
                             description),                            
                         new XElement(
                             "cu",
                             custom)));
            xDocument.Save(FilePath);

是否有其他方法可以比这更快地将xml写入文件。注意,该文件大约1MB,每次打开该文件并向其中添加节点时。

有没有办法使xdocumentsave更快?

基本上有三种方法来处理。net中的XML文件

  • XmlTextReader, xmltextwwriter -在。net中处理XML文件的最低级别API。它提供了对xml数据的流访问

  • XmlDocument -提供XML的DOM表示,这使得读取/修改数据变得容易

  • XDocument -提供XML的DOM表示并支持LINQ到XML查询

XDocumentXmlDocument在幕后都使用XmlReader/XmlWriter。而且两者都将所有数据保存在内存中,因此显然它们速度较慢且占用更多内存。您对此无能为力,因为每次调用代码时,整个xml文档都必须被解析,然后再次转储到磁盘。

如果你从XDocument切换到XmlReader/XmlWriter,你可以期待一个明显更好的性能(大胆猜测5 -10倍快),但它需要一些工作,因为XmlReader/XmlWriter的文档处理不像XDocument那么简单

根据你的用例,你也可以使用一些"讨厌的"技巧,比如为每个日志只写一个xml片段。这样,您就不必解析文档,只需将该片段附加到文件末尾即可。速度将与使用纯文本文件相当。缺点-生成的文件不是有效的XML,因为它没有任何根元素。从您的代码中处理这样的文件很容易,但是外部程序可能无法工作。