0

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

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

在父文件中:

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

这段代码很容易做,但我刚刚在 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() 不存在。

任何人都可以帮助处理这段代码,或者提供高性能的解决方案吗?

4

1 回答 1

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 倍。通过在父文件中实例化对象并在子文件中引用它,性能提升要小得多,但仍然很明显。

由于这看起来是一个很好的方法,我会接受这个作为答案。

于 2013-10-25T05:21:45.567 回答