我想在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
根据表的不同,migth最多可达10000个结果,最终会添加节点。每个节点都通过字段" DR"将相应的数据行连接到它。如果不进行重大重构,我怎样才能加快速度呢?
答案 0 :(得分:0)
预先填充树视图可能是一项非常漫长的任务......特别是如果树节点有一些深度。
更好的方法是随时动态填充。
仅填充根级别,并在每个节点上添加一个适当标识的虚拟子节点(如果该节点具有子节点)。 然后使用节点上的before expand事件按需填充子项,使用相同的方法为任何后续子项放置标记。记得要删除虚拟孩子。
它为打开尚未填充的节点增加了一点开销,但如果该节点不包含1,000个子节点,则不应该是一个显着的延迟。如果确实如此......树视图可能不是正确使用的控件。
提示:您可以使用nodes标签属性来帮助简化展开事件...例如,您可以让它包含运行以填充节点所需的SQL查询。
另请注意:更新此类控件时,请始终使用暂停和恢复布局属性。