Asp.net 如何将XPathNavigator.Select()绑定到控件的数据源?
我正在使用一个.NET应用程序,它面临着非常高的使用负载,因此我正在筛选数据方法,因为性能一直是一个问题。由于查询的重复性和只读性,它严重依赖于XML 同一文件的大量读取在一次访问中发生,一些用于单变量读取,一些用于绑定到数据源。后者是更大的挑战。我想加载一次,然后将对象传递给使用它的其他页面和函数。下面是我如何进行数据源绑定的: 在父文件中: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
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倍左右。通过在父文件中实例化对象并在子文件中引用它,可以获得更小但仍然显著的性能提升
因为这看起来是个好办法,我接受这个答案