程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 用DataSet.ReadXml讀取無Scheme的XML提速方法

用DataSet.ReadXml讀取無Scheme的XML提速方法

編輯:.NET實例教程

單純用DataSet的ReadXml方法讀取XML對於小數據量來說效率很高,但是對大數據量的XML來說就有些力不從心了。
比如,讓DataSet讀取一個16M的XML,能讓你等到地老天荒。如果你的機器配置不高,那肯定死的很難看、很窩囊。
咱不能見死不救不是,請往下看。

題外話:如果XML來自DataSet,那麼你是幸運的。你可以DataSet把架構信息帶上,別因膨脹那麼幾k的數據就捨不得了。

ReadXML缺省使用XMLReadMode.Auto方式讀取,這就給大數據量留下了低效率的伏筆。
因為如果XML沒有Scheme,DataSet就會自己推算XML的結構,然後再加載,這就是低效的主要原因。
讓DataSet推算不讓我們幫他算,因為DataSet已經提供了一個ReadXMLSchema方法。
如下:

Dim XMLText As String ''保存了XML的文本
Dim MyDs As New DataSet
Dim MyTab As DataTable

''加載架構
MyDs.ReadXmlSchema(New IO.StringReader(XMLText))
For Each MyTab In MyDs.Tables
MyTab.BeginLoadData()
Next


然後再讓DataSet加載數據。
注意:因為前面我們一個幫他加載架構信息了,這裡就可以讓DataSet加載數據時忽略Schema。
''加載數據
MyDs.ReadXml(New IO.StringReader(XMLText), XMLReadMode.IgnoreSchema)
For Each MyTab In MyDs.Tables
MyTab.EndLoadData()
Next

Ok,這樣就把數據快速的加載到DataSet了。經過實際測試,數據量越大效率比就越高。 

 

通常獲得DataSet的XML的方法是用GetXML,確實方便。但是返回的結果已經把DataSet的架構信息抹掉了,剩下的是單純的數據。
DataSet還給我們留了一個WriteXML方法(感動ing,勿擾....),這個方法可以把DataSet的數據寫到文件或流中。
比如:
Dim MS As New IO.MemoryStream
DataSet.WriteXml(MS, XMLWriteMode.WriteSchema) ''後面參數是關鍵,指明要帶上架構信息。
這樣在MS這個流中就保存了帶DataSet架構信息的全部數據。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved