Я хочу оптимизировать время загрузки нескольких древовидных изображений в приложении VB.NET. Структура каждого дерева рассматривается на основе таблицы базы данных, информация которой представлена набором данных. Каждая таблица имеет идентификатор и Parent_ID, что означает, что каждая таблица содержит иерархическую структуру. По этой причине необходимо заполнить каждое дерево, используя код, который помогает создать правильную структуру.Как оптимизировать загрузку данных в treeview
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 результатов, которые в конечном итоге добавляют узлы. Каждый узел имеет соответствующий datarow, прикрепленный к нему через поле «DR». Как я могу ускорить это, не делая большой рефакторинг?
Является ли процесс медленным? Вы определяете определенные части его, чтобы узнать, какой блок кода является медленной частью? – LarsTech
Как только узлы имеют список «узлы» в setTreenodeCollection, получается большое количество записей, в целом оно становится очень медленным. Но imo - это процедура, которая определяет дочерние элементы, являющиеся ядром проблемы. – TheLax
Если вы загружаете узлы, почему вы их тоже удаляете? – LarsTech