【发布时间】:2017-01-30 15:46:23
【问题描述】:
我想优化 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”附加到它的相应数据行。如何在不进行重大重构的情况下加快速度?
【问题讨论】:
-
进程慢吗?您是否正在计时它的特定部分以找出哪个代码块是慢速部分?
-
只要节点在 setTreenodeCollection 中的列表“节点”获得大量条目,它通常会变得非常慢。但 imo 是确定子节点的过程才是问题的核心。
-
如果您正在加载节点,为什么还要删除它们?
-
如果满足条件,他们将从父母列表中删除并添加到孩子列表中。这不是我自己的代码,它取自一些客户仍在使用的旧应用程序,因为它是开发人员,几乎没有文档,我必须以某种方式解决这个问题。当某些表的行数增长并且现在应用程序无法正常使用时,此问题开始出现。
标签: .net vb.net winforms treeview