用C#读/写大型XML文件
我正在使用XML数据库开发应用程序。 我有大型XML文件,我必须在其中读取和写入数据。 问题是我不想在内存中加载整个XML文件也不想因为性能问题而遍历整个文件。 因为如果我将整个文件加载到内存中,这将影响应用程序性能,并可能因内存韭菜而导致应用程序崩溃。
我需要一种足够的方法来将XML写入和读取到文件中,这对性能和内存没有影响。
任何帮助将不胜感激。
如果这个XML决定不是你的,你必须处理它(参见完整的MSDN示例https://msdn.microsoft.com/en-us/library/bb387013.aspx )
static IEnumerable StreamCustomerItem(string uri) { using (XmlReader reader = XmlReader.Create(uri)) { XElement name = null; XElement item = null; reader.MoveToContent(); while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { name = XElement.ReadFrom(reader) as XElement; break; } } while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { item = XElement.ReadFrom(reader) as XElement; if (item != null) { XElement tempRoot = new XElement("Root", new XElement(name)); tempRoot.Add(item); yield return item; } } } } } } }
但是,如果您控制决定,那么您应该忘记XML。 有几个选项可以帮助您和您的应用程序正常工作,而不会有太多麻烦。
- SQL Compact。 来自Microsoft的简单易用的SQL方法,并不需要SQL服务器实例。 https://www.microsoft.com/en-us/sqlserver/editions/2012-editions/compact.aspx
- SQL Lite。 适用于.net甚至Windows 8应用程序,简单而且非常稳定。 https://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki
你甚至可以使用MySQL,MariaDB或类似的东西!
看看这个,它会给你一些快速阅读xml的想法。 https://msdn.microsoft.com/en-us/library/system.xml.xmltextreader.aspx
有一些关于在stackoverflow中编写xml文件的线程。
如何将(大)XML写入C#中的文件?
但是,我认为如果你正在寻找非常好的性能,一些数据库解决方案,例如sqlserver,mongodb可能是更好的选择
使用此链接 。
使用XmlReader ,这是一个很好的选择,允许我们只将当前记录放入内存,这可以大大提高性能。
编辑:永远不要使用Load方法。它会将整个XML文件加载到内存中,如果此文件非常大,不仅查询可能需要很长时间才能执行,但它可能会因内存不足而失败。
在某种程度上,性能完全取决于运行应用程序的.NET版本。 另一个快速参考是Microsoft模式和实践文章 。
有4种方式:XMLDocument,XPathNavigator,XmlTextReader,Linq to XML,我认为它们之间的差异是有价值的!
XmlDocument :
它表示XML文件的内容。 从文件加载时,您将整个文件读入内存。 一般来说,如果你使用的是XmlDocument,那么XML解析要慢得多,而XmlDocument更适合在RAM中加载整个DOM, ……你的应用程序的内存消耗可能就像毛毛虫的动作一样!
使用DOM模型和XmlDocument或XPathDocument类来解析大型XML文档可能会对内存产生很大的需求。 这些要求可能严重限制服务器端Web应用程序的可伸缩性。
XPath或LINQ-To-XML :
如果您更关注性能,我个人不建议使用XPath或LINQ-To-XML查询。 XPathNavigator提供了一个用于导航和编辑XML数据的游标模型。
XmlReader :
与XmlDocument相比,它可能有助于实现更好的性能。 正如其他人已经建议的那样 XmlReader是一个抽象类,它提供了一个API,用于对XML数据流进行快速,仅向前,只读的解析…它可以从文件,Internet位置或任何其他数据流中读取。 从文件中读取时, 不会立即加载整个文档。 这就是它的亮点。
XmlTextReader :XmlTextReader,是XmlReader的一个实现。 使用XmlTextReader以前向只读方式快速处理XML数据,而无需使用validation,XPath和XSLT服务。
Eml规范化始终在XmlReader.Create的XmlReader中打开,这会影响XDocument。 默认情况下,规范化在XmlTextReader上关闭,这会影响XmlDocument和XmlNodeReader。 它可以通过Normalization属性打开。
设计注意事项
基准测试
上述就是C#学习教程:用C#读/写大型XML文件分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/990252.html