Linq 與 XML 是一個很好的搭配
但在某些情況之下,會照成效能的浪費,這種特定情況就是當查詢的時後原先XML檔案很大( >10MB)
然後在使用Linq 時 用的又是隱涵數查詢(沒有宣告物件)
例
Dim queray = from abc in xDoc.Root.Elements("RcpList")
select abc.Element("RecipeName")
這樣看起來沒有任何問題,在使用上也沒有任何問題
但問題就發生在使用 queay 的上面
設個中斷點,在查詢之後,然後把滑鼠移動到 queay 上面,會顯示 記憶體查詢
假設我們查詢出來的結果有十筆,當我們要從query裡面把資料取出時
事實上,每取出一次的動作,就是再做一次查詢
十筆資料都拿出來,那就是查詢十次
加上第一次的查詢,一共做了 11次
當原先的資料很大時( >10MB or 5000筆以上的資料 就會很明顯)
這時,查詢時就不能用 隱涵數的方式查詢,在一開始就必須宣告物件
當查詢出來的資料一樣是 XML 格式時,就比較簡單
將最外圍的 XML 標籤框起來就可以了
Dim SelectData As XElement = <GlassIDList></GlassIDList>
SelectData = <GlassIDList>
<%= From abc In XquaryGlassIDList.Elements("GlassList") _
Where abc.Elements("OKNG").Value = "NG" _
Select abc _
%>
</GlassIDList>
查詢出來的資料是自定議的物件時,就需要自行指定查詢出來的資料位置
自訂議的物件
Public Structure Keith_Type
Public MeaDevice As Integer
Public MeaMode As Integer
Public inputParameter As Double
End Structure
Dim query As Keith_Type() = From RcpList In xDoc.Elements("_strKeith") _
Select New With {.MeaDevice = System.Convert.ToInt32(RcpList.Element("MeaDevice ")), _
.MeaMode = System.Convert.ToInt32(RcpList.Element("MeaMode ")), _
.inputParameter = System.Convert.ToDouble(RcpList.Element("inputParameter "))) _
}
如範例,就可以把查詢出來的資料存到自定議的物件
- Oct 13 Thu 2011 23:06
XML 與 Linq (二) 將查詢的資料存入自訂一物件,加快查詢後的資料運用
全站熱搜
留言列表
發表留言