通过DataSet读取XML的效率问题
2013-06-24 13:50
225 查看
一直以来读取xml都是通过DataSet的ReadXML方法来解决,其他属性也都没有使用。在数据量小的时候倒也相安无事,直到今天读取一个20M的XML流才发现实在太影响效率了。
默认情况下,ReadXML缺省情况下使用XmlReadMode.Auto方式读取,用以前的作法,由于xml文件里没有包含 Scheme,DataSet会先推断xml的结构,然后再加载数据。可是对一个20M的流推断其结构效率可想而知。如果XmlReadMode采用的是除Auto和InferSchema(同样根据数据推断结构)之外的成员,那么除了行数会相应增加外,内容都被忽略。
如何解决这个讨厌的问题呢,其实也很简单先给DataSet提供Schema(ReadXmlSchema方法),XmlReadMode设为IgnoreSchema即可。经过测试处理时间由几分钟提高到几秒
![](http://www.cnblogs.com/Emoticons/hitwall.gif)
。示例如下:
1
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
DataSet ds = new DataSet();
2
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
using (StringReader sr = new StringReader( xxx ))
3
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
4
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
ds.ReadXmlSchema(sr);
5
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
6
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
ds.Tables[0].BeginLoadData();
7
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
8
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
9
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
using (StringReader sr = new StringReader( xxx ))
10
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
11
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
ds.ReadXml(sr, XmlReadMode.IgnoreSchema);
12
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
13
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
ds.Tables[0].EndLoadData();
默认情况下,ReadXML缺省情况下使用XmlReadMode.Auto方式读取,用以前的作法,由于xml文件里没有包含 Scheme,DataSet会先推断xml的结构,然后再加载数据。可是对一个20M的流推断其结构效率可想而知。如果XmlReadMode采用的是除Auto和InferSchema(同样根据数据推断结构)之外的成员,那么除了行数会相应增加外,内容都被忽略。
如何解决这个讨厌的问题呢,其实也很简单先给DataSet提供Schema(ReadXmlSchema方法),XmlReadMode设为IgnoreSchema即可。经过测试处理时间由几分钟提高到几秒
![](http://www.cnblogs.com/Emoticons/hitwall.gif)
。示例如下:
1
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
DataSet ds = new DataSet();
2
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
using (StringReader sr = new StringReader( xxx ))
3
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
4
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
ds.ReadXmlSchema(sr);
5
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
6
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
ds.Tables[0].BeginLoadData();
7
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
8
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
9
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
using (StringReader sr = new StringReader( xxx ))
10
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
11
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
ds.ReadXml(sr, XmlReadMode.IgnoreSchema);
12
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
13
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
ds.Tables[0].EndLoadData();
相关文章推荐
- 通过DataSet读取XML的效率问题(转)
- 通过DataSet读取XML的效率问题
- 通过DataSet读取XML的效率问题
- 通过DataSet读取XML的效率问题 (转)
- 通过DataSet读取XML的效率问题
- 通过DataSet读取XML的效率问题(转)
- 通过DataSet读取XML的效率问题
- 通过DataSet读取XML的效率问题
- 通过DataSet读取XML的效率问题
- 通过DataSet读取XML的效率问题
- 使用XMLReader、XMLDocument和DataSet读取xml文件及效率
- 使用XMLReader、XMLDocument和DataSet读取xml文件及效率
- Eclipse中通过FileSystemXmlApplicationContext读取不到配置文件问题
- IE9下通过XSLT转换XML的显示问题
- C#中读取XML到Dataset最简单的方法.
- SpringMVC + mybatis 无法读取JAR包中的XML配置文件问题
- python通过ElementTree操作XML获取结点读取属性美化XML
- 用asp读取xml时清除缓存的问题与解决办法
- Atitit 提升效率 降低技术难度与提升技术矛盾的解决方案 1. 问题 2 1.1. 高手喜欢技术挑战怎么办,但会提升技术难度 导致新手不会用怎么办 2 2. 解决方案 2 2.1. 通过开会统
- 读取通过http发来的xml数据