TreeView中有1000+的节点,这个时候不管用非递归还是递归,遍历速度都非常慢,要7,8秒左右。如何才能更快的遍历啊。

解决方案 »

  1.   

    就是把一个网页解析成了标签树,用TreeView显示,后来要遍历TreeView下生成的所有节点。速度太慢。
      

  2.   

    代码如下:递归的。 
           public static void Traversal(TreeNodeCollection tc, string ptext)
            {
                QueueItem item = null;
                foreach (TreeNode node in tc)
                {
                    item = (QueueItem)node.Tag;
                    if (item.Htmltag.Gentagtype == GeneralTagType.Text)
                    {
                        node.Text = ptext;
                    }
                    if (node.Nodes.Count > 0)
                    {
                        Traversal(node.Nodes, ptext);
                    }
                }
            }---------------------------------------------------------
    非递归的。        private static void NonReverseTravel(TreeNode rootnode, string ptext)
            {
                Stack<TreeNode> stack = new Stack<TreeNode>();
                if (rootnode == null)
                {
                    return;
                }
                else
                {
                    stack.Push(rootnode);
                    while (stack.Count > 0)
                    {
                        TreeNode currentNode = stack.Pop();
                        QueueItem tempit = (QueueItem)currentNode.Tag;
                        if (tempit.Htmltag.Gentagtype == GeneralTagType.Text)
                        {
                            currentNode.Text = ptext;
                        }
                        foreach (TreeNode tn in currentNode.Nodes)
                        {
                            stack.Push(tn);
                        }
                    }
                }
            }
      

  3.   

    代码如下:递归的。  
      public static void Traversal(TreeNodeCollection tc, string ptext)
      {
      QueueItem item = null;
      foreach (TreeNode node in tc)
      {
      item = (QueueItem)node.Tag;
      if (item.Htmltag.Gentagtype == GeneralTagType.Text)
      {
      node.Text = ptext;
      }
      if (node.Nodes.Count > 0)
      {
      Traversal(node.Nodes, ptext);
      }
      }
      }---------------------------------------------------------
    非递归的。  private static void NonReverseTravel(TreeNode rootnode, string ptext)
      {
      Stack<TreeNode> stack = new Stack<TreeNode>();
      if (rootnode == null)
      {
      return;
      }
      else
      {
      stack.Push(rootnode);
      while (stack.Count > 0)
      {
      TreeNode currentNode = stack.Pop();
      QueueItem tempit = (QueueItem)currentNode.Tag;
      if (tempit.Htmltag.Gentagtype == GeneralTagType.Text)
      {
      currentNode.Text = ptext;
      }
      foreach (TreeNode tn in currentNode.Nodes)
      {
      stack.Push(tn);
      }
      }
      }
      }
      

  4.   

    把执行代码放入
                treeView1.BeginUpdate();
                treeView1.EndUpdate();
    之间试试
      

  5.   

    应该不是遍历时速度慢,
    应该是这两句:
     node.Text = ptext;和
    currentNode.Text = ptext;这个地方慢了。遍历的目的干什么?为什么又要修改节点的Text?