代码之家  ›  专栏  ›  技术社区  ›  Radu

XML阅读优化.NET

  •  0
  • Radu  · 技术社区  · 16 年前

    到目前为止我得到的是:

    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

    有什么方法能让你的表现更好吗?

    4 回复  |  直到 12 年前
        1
  •  1
  •   Skurmedel    16 年前

    如果您想压缩性能,我建议使用XmlReader。它只是向前的,当然使用起来有点笨重,您不会得到任何闪亮的XPath表达式或任何东西。我不能给任何性能比较,但它很少是我的瓶颈。我在工作中经常使用它来处理XML,而且从来都不是问题。

    当然,在易用性和性能之间通常存在一种折衷。也许您应该使用XmlReader实现一个版本并对其计时,它应该给您一个提示,如果差异足够小,那么您最好使用XPathNavigator,因为它更易于使用。对于XmlReader,通常需要维护额外的状态,这取决于XML的复杂性。

        2
  •  2
  •   Ron Savage    16 年前

    我更喜欢使用解析XML的类,比如DataSet类。它阻塞了一些非常复杂的XML(说它无效),但是 it works fine on the example you provided .

    Source code for the app ,或者只是 installer .

        3
  •  1
  •   SoftwareGeek    16 年前

    是的,调查一下 . LINQ在处理人际关系方面尤其强大;查询(&A);通过xml内容进行解析。

    LINQ

        4
  •  1
  •   Justin    16 年前

    长话短说——当你说你的表现明显更好时,你到底想达到什么目的?Xml不是一种高性能的文件格式,因此对Xml的操作总是相对缓慢的。获得性能的唯一真正方法是尽量减少正在读取的xml的数量,例如:

    • 您正在尝试对这些xml文件中包含的数据进行分析吗?

    如果是这样的话,您很可能会一遍又一遍地读取相同的数据,因此您最好解析所有xml并将其放入更合适的数据源(例如SQL数据库,甚至可能是为统计分析而优化的另一个数据库)

    如果是这样,那么您应该使用XmlReader—而XmlDocument将加载和解析整个xml文档,XmlReader只是按原样读取—这意味着XmlReader在读取大型xml文档的小部分时性能更高。