2010-07-09 79 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