VB.NETアプリケーションで複数のツリービューの読み込み時間を最適化したいと思います。各ツリービューの構造は、情報がデータセットで表されるデータベーステーブルに基づいています。 各テーブルにはIDとParent_IDがあります。つまり、各テーブルには階層構造が含まれています。このため、正しい構造を作成するのに役立つコードを使用して、各ツリービューを作成する必要があります。ツリービューへのデータロードを最適化する方法
Private Function setTreenodeCollection(ByRef inDataset As DataSet, _
ByVal tblName As String, _
Optional ByVal inUseCheckboxes As Boolean = True)
Dim resultSet As New TreeNodeCollection
Dim nodes As New List(Of cls_TreeNode_Exp)
If Not dr.RowState = DataRowState.Deleted And dr("Description", DataRowVersion.Original).ToString.Length > 0 Then
Dim NodeAkt As cls_TreeNode_Exp = New cls_TreeNode_Exp(dr, dr("Description"), dr("ID"), typ, inUseCheckboxes, icon)
nodes.Add(NodeAkt)
Dim childNodes As List(Of cls_TreeNode_Exp) = (From node As cls_TreeNode_Exp In nodes
Where node.DR("ID_parent") = 0
Select node).ToList
For Each node As cls_TreeNode_Exp In childNodes
nodes.Remove(node)
resultSet.Add(node)
Me.getChildNodes(nodes, node)
Next
Return resultSet
End Function
Private Sub getChildNodes(inNodes As List(Of cls_TreeNode_Exp), inParentNode As cls_TreeNode_Exp)
Dim childNodes As List(Of cls_TreeNode_Exp)
childNodes = (From node As cls_TreeNode_Exp In inNodes
Where node.DR("ID_parent") = inParentNode.DR("ID")
Select node).ToList
For Each node As cls_TreeNode_Exp In childNodes
inNodes.Remove(node)
inParentNode.Nodes.Add(node)
Me.getChildNodes(inNodes, node)
Next
End Sub
テーブルに応じて、最大10000の結果が出てノードが追加されます。各ノードには、対応するデータローがフィールド「DR」を介して接続されている。どうすれば大きなリファクタリングをせずにこれをスピードアップできますか?
プロセスが遅いですか?どのコードブロックが遅い部分であるかを見つけるために、その特定の部分をタイミングしていますか? – LarsTech
ノードがリストを持つとすぐに、setTreenodeCollectionのノードは大量のエントリを取得しますが、一般的には非常に遅くなります。しかし、それは問題の中核である子ノードを決定する手続きです。 – TheLax
ノードをロードしている場合は、そのノードもなぜ削除していますか? – LarsTech