您的位置:首页 > 其它

通过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即可。经过测试处理时间由几分钟提高到几秒

。示例如下:
   
 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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: