我正在使用面向非常高的使用负载的.NET应用程序,所以我正在筛选数据方法,因为性能一直是个问题。由于查询的重复性和只读性,它严重依赖于XML。
同一个文件的大量读取在一次访问中发生,一些用于单个变量读取,一些用于绑定到数据源(后者是更大的挑战)。我想加载一次然后将对象传递给使用它的其他页面和函数。这是我一直在做DataSource绑定的方法:
在父文件中:
Public Property XmlDoc As XmlDocument("file.xml")
在子文件中:
Dim nodes As XmlNodeList = XmlDoc.SelectNodes("/path")
If nodes.Count > 0 Then
myListView.DataSource = nodes
myListView.DataBind()
Else
myListView.Visible = False
End If
这段代码很容易做到,但我刚刚读过on MSDN XmlDocument的性能非常差。他们建议使用XPathNavigator,它很容易变量,但我不知道如何将它设置为控件的数据源。这是我的尝试:
Dim xDoc As XPathDocument = New XPathDocument("file.xml")
Dim xNav As XPathNavigator = xDoc.CreateNavigator()
myListView.DataSource = xNav.MysteryFunction("/path")
myListView.DataBind()
不幸的是,MysteryFunction()不存在。
任何人都可以帮助解决这些代码,或者提供高性能的解决方案吗?
答案 0 :(得分:0)
我刚刚找到了一个解决方案,所以我想我会把它作为一个可能的答案。
如果您专注于设置控件的DataSource,那么您应该使用XmlDataSource。但是XmlDataSource并不好,所以你应该运行XPathNavigator的第二个变量。这是你如何做到的。
在父文件中:
Public Property Xds As XmlDataSource
Public Property XNav As XPathNavigator
...
Xds.DataFile = "file.xml"
XNav = Xds.GetXmlDocument().CreateNavigator
在子文件中:
Master.Xds.XPath = "/path/data"
myListView.DataSource = xds.Data
Dim attribute As String = Master.XNav.SelectSingleNode("/path/var").GetAttribute("name", "")
<强>更新强>
我做了一些性能测试,从XmlDocument做只读数据绑定比使用XmlDataSource慢大约1000倍。通过在父文件中实例化对象并在子文件中引用它,可以获得更小但仍然明显的性能提升。
由于这看起来很好,我会接受这个作为答案。