微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过DataSet读取XML的效率问题

一直以来读取xml都是通过DataSet的readxml方法解决,其他属性也都没有使用。在数据量小的时候倒也相安无事,直到今天读取一个20M的XML流才发现实在太影响效率了。
认情况下,readxml缺省情况下使用XmlReadMode.Auto方式读取,用以前的作法,由于xml文件里没有包含 Scheme,DataSet会先推断xml的结构,然后再加载数据。可是对一个20M的流推断其结构效率可想而知。如果XmlReadMode采用的是除Auto和InferSchema(同样根据数据推断结构)之外的成员,那么除了行数会相应增加外,内容都被忽略。
如何解决这个讨厌的问题呢,其实也很简单先给DataSet提供Schema(readxmlSchema方法),XmlReadMode设为IgnoreSchema即可。经过测试处理时间由几分钟提高到几秒 。示例如下:

1 DataSetds=newDataSet();
2 using(StringReadersr=newStringReader(xxx))
3 {
4 ds.readxmlSchema(sr);
5 }
6 ds.Tables[0].BeginLoadData();
7
8
9 using(StringReadersr=newStringReader(xxx))
10 {
11 ds.readxml(sr,XmlReadMode.IgnoreSchema);
12 }
13 ds.Tables[0].EndLoadData();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。