2010-07-09 80 views
0

這裏就是我有迄今:XML閱讀優化.NET

Dim xpDoc As New XPathDocument(strXmlUrl & strXmlInfo(0) & "?xml=1") 
Dim xpNav As XPathNavigator = xpDoc.CreateNavigator() 
Dim xpExpression(9) As XPathExpression 
Dim xpIter(9) As XPathNodeIterator 

xpExpression(0) = xpNav.Compile("/profile/steamID64") 
'etc.. up to 9 

For i = 0 To 9 
    xpIter(i) = xpNav.[Select](xpExpression(i)) 
    While xpIter(i).MoveNext() 
     If xpIter(i).Count <> 0 Then 
      strXmlInfo(i) = xpIter(i).Current.Value 
     Else 
      strXmlInfo(i) = "" 
     End If 
    End While 
Next 

這些都是我在解析XML文件: http://steamcommunity.com/id/brosephus?xml=1

處理這個任何會顯著執行更好?

回答

1

如果你想擠進表現,我建議的XmlReader。它只是前向的,當然有點笨重,你不會得到任何閃亮的XPath表達式或任何東西。雖然我不能進行任何性能比較,但它對我來說很少是瓶頸。我在工作中使用了很多XML處理,這從來都不是問題。

然而,在易用性和性能之間通常存在折衷。也許你應該使用XmlReader來實現一個版本並且給它們定時,它應該給你一個提示,如果差別足夠小,你可以堅持使用XPathNavigator,因爲它更易於使用。使用XmlReader通常會有額外的狀態需要維護,具體取決於XML的複雜性。

+0

我會按照你的意見,並嘗試和時間。應用程序執行幾分之一秒的速度並不是那麼重要......但是,我希望它能夠...... – Radu 2010-07-09 10:02:21

1

是的,看看LINQ到XML。 LINQ在處理關係上特別強大&查詢&解析XML內容。

LINQ

+0

我在思考XmlReader與XPathNavigator的更多問題,但我也會嘗試一下,看看性能增益是否顯着。 – Radu 2010-07-09 01:34:31

+0

@Radu - 是的,xmlreader肯定會更快,但linq使解析/查詢您的xml更簡單。對於較小的文件,差異不大。 – SoftwareGeek 2010-07-09 01:40:22

+0

我想我會堅持使用xmlreader,那只是一旦我有了這個代碼,它可能不需要任何維護,所以我不擔心這個特定片段的複雜程度。 – Radu 2010-07-09 10:08:02

1

簡短的回答 - 我個人想不出任何會大大改善該片段性能的事情。

很長的答案 - 當你說表現更好時,你試圖達到的是什麼? Xml不是一種高性能的文件格式,因此xml上的操作總是比較慢。唯一真正的方式來獲得性能將盡量減少你正在閱讀XML的量,例如:

  • 你試圖做包含在這些XML文件中的數據的分析?

如果是這樣,它可能是你會一遍又一遍地讀相同的數據,因此你可能會更好解析所有的XML,並把它變成一個更合適的數據源(如SQL數據庫,或者甚至可能進行統計分析而優化的另一個數據庫)

  • 你只在文檔(的一小部分有興趣的製作示例改變,因爲你最後一次看文件)

如果是這樣,那麼你應該使用XmlReader - 而XmlDocument將加載和分析整個xml文檔,XmlReader只是讀取它 - 這意味着在閱讀大型xml文檔的小部分時XmlReader更具性能。

+0

我試圖抓取一些數據並將其顯示出來。大部分數據將在半定期的基礎上發生變化 - 基本上是關於一個人的信息以及他們的在線狀態。 – Radu 2010-07-09 10:04:11

+0

另外,我使用了XmlDocument,因爲我想我已經需要來自該文檔的10條數據,所以我可能只需加載整個事物並直接解析它,而不是按順序解析它。我其實已經在XmlReader中有了一些東西,所以我會試試看。 – Radu 2010-07-09 10:06:54

2

我更喜歡使用爲我解析XML的類,比如DataSet類。它扼殺了一些非常複雜的XML(說它是無效的),但是it works fine on the example you provided

我突出顯示了「解析」XML(一行)所需的代碼。這個玩具應用程序的其餘部分只是從表名稱構建導航樹,然後將數據網格指向選定的DataTable。

Source code for the app,或只是一個installer

+0

哇,真酷! – Radu 2010-07-09 10:00:43