Asp.net 如何将XPathNavigator.Select()绑定到控件的数据源?

Asp.net 如何将XPathNavigator.Select()绑定到控件的数据源?,asp.net,xml,vb.net,optimization,xpath,Asp.net,Xml,Vb.net,Optimization,Xpath,我正在使用一个.NET应用程序,它面临着非常高的使用负载,因此我正在筛选数据方法,因为性能一直是一个问题。由于查询的重复性和只读性,它严重依赖于XML 同一文件的大量读取在一次访问中发生,一些用于单变量读取,一些用于绑定到数据源。后者是更大的挑战。我想加载一次,然后将对象传递给使用它的其他页面和函数。下面是我如何进行数据源绑定的: 在父文件中: Public Property XmlDoc As XmlDocument("file.xml") Public Property Xds As Xm

我正在使用一个.NET应用程序,它面临着非常高的使用负载,因此我正在筛选数据方法,因为性能一直是一个问题。由于查询的重复性和只读性,它严重依赖于XML

同一文件的大量读取在一次访问中发生,一些用于单变量读取,一些用于绑定到数据源。后者是更大的挑战。我想加载一次,然后将对象传递给使用它的其他页面和函数。下面是我如何进行数据源绑定的:

在父文件中:

Public Property XmlDoc As XmlDocument("file.xml")
Public Property Xds As XmlDataSource
Public Property XNav As XPathNavigator

...

Xds.DataFile = "file.xml"

XNav = Xds.GetXmlDocument().CreateNavigator
在子文件中:

Dim nodes As XmlNodeList = XmlDoc.SelectNodes("/path")

If nodes.Count > 0 Then
  myListView.DataSource = nodes
  myListView.DataBind()
Else
  myListView.Visible = False
End If
Master.Xds.XPath = "/path/data"
myListView.DataSource = xds.Data

Dim attribute As String = Master.XNav.SelectSingleNode("/path/var").GetAttribute("name", "")
这段代码很容易实现,但我刚刚读到XmlDocument的性能非常差。他们建议使用XPathNavigator,这对于变量来说很容易,但我不知道如何将其设置为控件的数据源。这是我的尝试:

Dim xDoc As XPathDocument = New XPathDocument("file.xml")
Dim xNav As XPathNavigator = xDoc.CreateNavigator()

myListView.DataSource = xNav.MysteryFunction("/path")
myListView.DataBind()
不幸的是,MysteryFunction不存在


有谁能帮我编写这段代码,或者提供一个高性能的解决方案吗?

我刚刚找到了一个解决方案,所以我想我会给出一个可能的答案

如果您专注于设置控件的数据源,那么应该使用XmlDataSource。但是XmlDataSource并不好,所以您应该运行XPathNavigator的第二个变量。这是你可以做到的

在父文件中:

Public Property XmlDoc As XmlDocument("file.xml")
Public Property Xds As XmlDataSource
Public Property XNav As XPathNavigator

...

Xds.DataFile = "file.xml"

XNav = Xds.GetXmlDocument().CreateNavigator
在子文件中:

Dim nodes As XmlNodeList = XmlDoc.SelectNodes("/path")

If nodes.Count > 0 Then
  myListView.DataSource = nodes
  myListView.DataBind()
Else
  myListView.Visible = False
End If
Master.Xds.XPath = "/path/data"
myListView.DataSource = xds.Data

Dim attribute As String = Master.XNav.SelectSingleNode("/path/var").GetAttribute("name", "")
更新

我做了一些性能测试,从XmlDocument进行只读数据绑定比使用XmlDataSource慢1000倍左右。通过在父文件中实例化对象并在子文件中引用它,可以获得更小但仍然显著的性能提升

因为这看起来是个好办法,我接受这个答案