通过DataSet读取XML的效率问题(转)
2005-12-20 16:11
363 查看
一直以来读取xml都是通过DataSet的ReadXML方法来解决,其他属性也都没有使用。在数据量小的时候倒也相安无事,直到今天读取一个20M的XML流才发现实在太影响效率了。
默认情况下,ReadXML缺省情况下使用XmlReadMode.Auto方式读取,用以前的作法,由于xml文件里没有包含Scheme,DataSet会先推断xml的结构,然后再加载数据。可是对一个20M的流推断其结构效率可想而知。如果XmlReadMode采用的是除Auto和InferSchema(同样根据数据推断结构)之外的成员,那么除了行数会相应增加外,内容都被忽略。
如何解决这个讨厌的问题呢,其实也很简单先给DataSet提供Schema(ReadXmlSchema方法),XmlReadMode设为IgnoreSchema即可。经过测试处理时间由几分钟提高到几秒。示例如下:
1 DataSet ds = new DataSet();
2 using (StringReader sr = new StringReader( xxx ))
3 {
4 ds.ReadXmlSchema(sr);
5 }
6 ds.Tables[0].BeginLoadData();
7
8
9 using (StringReader sr = new StringReader( xxx ))
10 {
11 ds.ReadXml(sr, XmlReadMode.IgnoreSchema);
12 }
13 ds.Tables[0].EndLoadData();
默认情况下,ReadXML缺省情况下使用XmlReadMode.Auto方式读取,用以前的作法,由于xml文件里没有包含Scheme,DataSet会先推断xml的结构,然后再加载数据。可是对一个20M的流推断其结构效率可想而知。如果XmlReadMode采用的是除Auto和InferSchema(同样根据数据推断结构)之外的成员,那么除了行数会相应增加外,内容都被忽略。
如何解决这个讨厌的问题呢,其实也很简单先给DataSet提供Schema(ReadXmlSchema方法),XmlReadMode设为IgnoreSchema即可。经过测试处理时间由几分钟提高到几秒。示例如下:
1 DataSet ds = new DataSet();
2 using (StringReader sr = new StringReader( xxx ))
3 {
4 ds.ReadXmlSchema(sr);
5 }
6 ds.Tables[0].BeginLoadData();
7
8
9 using (StringReader sr = new StringReader( xxx ))
10 {
11 ds.ReadXml(sr, XmlReadMode.IgnoreSchema);
12 }
13 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读取不到配置文件问题
- Java读取、创建xml(通过dom方式)
- c# 用dataset读取xml也很方便
- 解决CxGrid Filter 后,通过 Dataset 循环时得出的结果与 Grid显示不同步的问题.
- 【我的问题】android通过XML实现按钮被按下的反馈效果
- 解决 IDEA 中src下xml等资源文件无法读取的问题
- HTML/Ajax/XML数据交互:HTML通过Ajax读取XML的存储信息
- filter从web.xml读取config的时候中文编码问题