[英]Read single large file containing multiple XML files into multiple xml records in C#
[英]Read/Write Large XML Files in C#
我正在使用XML数据库开发应用程序。 我有很大的XML文件,必须在其中读写数据。 问题是由于性能问题,我不想将整个XML文件加载到内存中,也不想遍历整个文件。 因为如果我将整个文件加载到内存中,这将影响应用程序性能,并且可能由于内存韭葱而使应用程序崩溃。
我需要一种足够的方法来将XML写入和读取到文件中,这不会影响性能和内存。
任何帮助将不胜感激。
如果这个XML决定不是您的决定,那么您就必须应对(请参阅整个MSDN示例http://msdn.microsoft.com/zh-cn/library/bb387013.aspx )
static IEnumerable<XElement> 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。 有多种选择可以帮助您和您的应用程序正常运行,而不会带来太多麻烦。
您甚至可以使用MySQL,MariaDB或任何类似的东西!
看看这个,它将为您提供有关快速读取xml的一些想法。 http://msdn.microsoft.com/zh-CN/library/system.xml.xmltextreader.aspx
已经有一些关于在stackoverflow中写入xml文件的线程。
但是,我认为如果您正在寻找非常好的性能,那么某些数据库解决方案(例如sqlserver,mongodb)可能是一个更好的选择
性能在一定程度上取决于您的应用程序所运行的.NET版本。 另一个快速参考是Microsoft模式和实践文章 。
有4种方法:XMLDocument,XPathNavigator,XmlTextReader,Linq到XML,我认为它们之间的差异很有价值!
XmlDocument :
它代表XML文件的内容。 从文件加载文件时,您会将整个文件读入内存。 一般来说,如果您使用的是XmlDocument,则XML解析会慢得多,而XmlDocument更适合于将整个DOM加载到RAM中……您的应用程序的内存消耗可能就像毛毛虫的移动方式一样!
使用DOM模型和XmlDocument或XPathDocument类来解析大型XML文档可能对内存有很大的要求。 这些需求可能会严重限制服务器端Web应用程序的可伸缩性。
XPath或LINQ-To-XML :
如果您更关注性能,我个人不建议使用XPath或LINQ-To-XML查询。 XPathNavigator提供了用于浏览和编辑XML数据的游标模型。
XmlReader :
与XmlDocument相比,它可能有助于获得更好的性能。 正如其他人已经建议的那样。 XmlReader是一个抽象类,并提供API用于XML数据流的快速,只读,只读解析……它可以从文件,互联网位置或任何其他数据流中读取。 从文件读取时,您不会一次加载整个文档。 这就是它的亮点。
XmlTextReader :XmlTextReader,是XmlReader的实现。 使用XmlTextReader以向前,只读的方式快速处理XML数据,而无需使用验证,XPath和XSLT服务。
EOL规范化始终在XmlReader.Create的XmlReader中启用,这会影响XDocument。 默认情况下,XmlTextReader上的规范化处于关闭状态,这会影响XmlDocument和XmlNodeReader。 可以通过Normalization属性将其打开。
设计注意事项
基准测试
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.