默認情況下,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();