0

非常に高い使用負荷に直面している.NETアプリケーションを使用しているため、パフォーマンスが問題になっているため、データ方法論をふるいにかけています。クエリの繰り返しと読み取り専用の性質により、XML に大きく依存しています。

1 回のアクセスで同じファイルの多数の読み取りが発生します。いくつかは単一変数の読み取りであり、いくつかはデータソースへのバインディングです (後者はより大きな課題です)。一度ロードしてから、それを使用する他のページや関数にオブジェクトを渡したいです。私が 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

このコードは簡単に実行できますが、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

解決策を1つ見つけたので、可能な答えとして提示したいと思いました。

コントロールの DataSource の設定に重点を置いている場合は、XmlDataSource を使用する必要があります。ただし、XmlDataSource は適切ではないため、XPathNavigator の 2 番目の変数を実行する必要があります。方法は次のとおりです。

親ファイルで:

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 に答える