C# XML,谁知道最快的大体积XML读取方式?
一个21MB的RSS文档大概10000项(item元素)数据我设计了一个针对它各个元素的查询功能。整个查询函数运行时间在0.6-0.7秒左右,除去载入那段代码用时,其余只...
一个21MB的RSS文档大概10000项(item元素)数据
我设计了一个针对它各个元素的查询功能。
整个查询函数运行时间在0.6-0.7秒左右,除去载入那段代码用时,其余只需0.0001秒左右
我用的是LINQ TO XML的XDoc.load()函数载入
您还有其它更快捷的方法吗?请列举出来,最后被采纳者另加分100+。
注:无需完整代码,只需说明用到哪些类与命名空间,以及他们的优缺点。
非常感谢您的帮助! 展开
我设计了一个针对它各个元素的查询功能。
整个查询函数运行时间在0.6-0.7秒左右,除去载入那段代码用时,其余只需0.0001秒左右
我用的是LINQ TO XML的XDoc.load()函数载入
您还有其它更快捷的方法吗?请列举出来,最后被采纳者另加分100+。
注:无需完整代码,只需说明用到哪些类与命名空间,以及他们的优缺点。
非常感谢您的帮助! 展开
4个回答
展开全部
C#处理XML的方式很多,可以是XMLReader,可以载入到XMLDocument中直接读取Document或者用LINQ查询,可以使用XPathNavigater,某些情况下,还可以转换成ADO.net中的数据类型如DataSet,再去查询,或者通过反序列化转换成某一个类的实例。
其中,最快的方式是 XMLReader,它是一个“向前的”,“只读的”流模型,非常类似ADO中的SqlDataReader。它的局限性是不可以浏览和修改。通常是在一个循环当中遍历XML文件,当然你要查询某个特定的值可以放在这个循环中,找到后就退出,只要循环体中处理的合适,速度肯定比你查询XMLDocument快,当然也比在XMLDocument文档的基础上转换后的速度快。
直接读取XMLDocument Load()方法载入的文档速度也会比你用linkQ要快,相对于XMLReader,XMLDocument 的优点是可以“浏览”,即你不需要按照文档的顺序读取,可以直接定位,在查阅的时候可以“倒回去”取值,如使用GetElementByTagName()方法等,虽然方便,但是速度比不上XMLReader,因为XMLReader最多只对文档扫描一遍。当然XMLDocument 也可以修改,类似XMLReader,XMLWriter可以修改。
下面是使用XMLReader的一个简单例子:
XmlReader xReader = XmlReader.Create("books.xml");
while (xReader.Read())
{
//按文档顺序遍历名为ElementName的节点
if (xReader.NodeType == XmlNodeType.Element && xReader.Name == "ElementName")
{
xReader.MoveToAttribute("YourAttrName");//按文档顺序直接跳到某个属性
richTextBox1.AppendText(xReader.Value); //获取值
}
}
命名空间:System.XML
XmlReader 提供的方法非常多,根据情况选择合适的方式,提高效率。
其中,最快的方式是 XMLReader,它是一个“向前的”,“只读的”流模型,非常类似ADO中的SqlDataReader。它的局限性是不可以浏览和修改。通常是在一个循环当中遍历XML文件,当然你要查询某个特定的值可以放在这个循环中,找到后就退出,只要循环体中处理的合适,速度肯定比你查询XMLDocument快,当然也比在XMLDocument文档的基础上转换后的速度快。
直接读取XMLDocument Load()方法载入的文档速度也会比你用linkQ要快,相对于XMLReader,XMLDocument 的优点是可以“浏览”,即你不需要按照文档的顺序读取,可以直接定位,在查阅的时候可以“倒回去”取值,如使用GetElementByTagName()方法等,虽然方便,但是速度比不上XMLReader,因为XMLReader最多只对文档扫描一遍。当然XMLDocument 也可以修改,类似XMLReader,XMLWriter可以修改。
下面是使用XMLReader的一个简单例子:
XmlReader xReader = XmlReader.Create("books.xml");
while (xReader.Read())
{
//按文档顺序遍历名为ElementName的节点
if (xReader.NodeType == XmlNodeType.Element && xReader.Name == "ElementName")
{
xReader.MoveToAttribute("YourAttrName");//按文档顺序直接跳到某个属性
richTextBox1.AppendText(xReader.Value); //获取值
}
}
命名空间:System.XML
XmlReader 提供的方法非常多,根据情况选择合适的方式,提高效率。
展开全部
XMLReader可以顺序处理比较大的XML。但是不结构化。
说回来,读入21M的内容只需要不到一秒,也够不可思议的了。
说回来,读入21M的内容只需要不到一秒,也够不可思议的了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Linq 是经过内部封装之后的 读xml的类。如果想速度更快,就解除他的封装自己组装XmlDocument 直接 XML。load(); 这样应该更快吧。不过我没有读过这么大的xml格式的数据。随便说说,说的不对的话 你别介意。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我没有比较过,从理论上说说。XmlReader的速度要优于XmlDocument,如果你只是读取的话。
至于和LinqToXml比较我不清楚。
Sax.Net据说也是比较快的,但是速度多少我不清楚。你可以试试。
至于和LinqToXml比较我不清楚。
Sax.Net据说也是比较快的,但是速度多少我不清楚。你可以试试。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询