一个功能更强大,性能更高的树控件DevComponents.AdvTree.AdvTree

原文链接:https://www.cnblogs.com/a7373773/archive/2009/07/27/1532236.html

一直在用DevComponents.DotNetBar2  控件
近来探索Add()和AddRange()的性能问题。
一样用极为不专业不科学的方法,
比较DevComponents.AdvTree.AdvTree 的Add()和AddRange()的性能


 1private void buttonX1_Click(object sender, EventArgs e)
 2        {
 3            TimeSpan ts1 = new TimeSpan(DateTime.Now.Ticks);
 4
 5            advTree1.Nodes.Clear();
 6
 7            for (int i = 0; i < integerInput1.Value; i++)
 8            {
 9                Node node = new Node();
10                node.Text = "这是第:" + i.ToString() + "节点";
11
12                advTree1.Nodes.Add(node);
13            }
14
15            TimeSpan ts2 = new TimeSpan(DateTime.Now.Ticks);
16
17            TimeSpan ts = ts1.Subtract(ts2).Duration();
18
19            lbltiem1.Text = ts.Minutes.ToString() + "分钟" +
20                ts.Seconds.ToString() + "秒" +
21                ts.Milliseconds + "毫秒";
22        }
23
24        private void buttonX2_Click(object sender, EventArgs e)
25        {
26            TimeSpan ts1 = new TimeSpan(DateTime.Now.Ticks);
27
28            advTree1.Nodes.Clear();
29
30            Node[] nodes = new Node[integerInput1.Value];
31
32            for (int i = 0; i < integerInput1.Value; i++)
33            {
34                Node node = new Node();
35                node.Text = "这是第:" + i.ToString() + "节点";
36
37                nodes[i] = node;
38            }
39
40            advTree1.Nodes.AddRange(nodes);
41
42            TimeSpan ts2 = new TimeSpan(DateTime.Now.Ticks);
43
44            TimeSpan ts = ts1.Subtract(ts2).Duration();
45
46            lbltiem2.Text = ts.Minutes.ToString() + "分钟" +
47                ts.Seconds.ToString() + "秒" +
48                ts.Milliseconds + "毫秒";
49        }
50
51        private void buttonX3_Click(object sender, EventArgs e)
52        {
53            TimeSpan ts1 = new TimeSpan(DateTime.Now.Ticks);
54
55            advTree1.Nodes.Clear();
56
57            TimeSpan ts2 = new TimeSpan(DateTime.Now.Ticks);
58
59            TimeSpan ts = ts1.Subtract(ts2).Duration();
60
61            lbltiem3.Text = ts.Minutes.ToString() + "分钟" +
62                ts.Seconds.ToString() + "秒" +
63                ts.Milliseconds + "毫秒";
64        }
65
66        private void buttonX4_Click(object sender, EventArgs e)
67        {
68            TimeSpan ts1 = new TimeSpan(DateTime.Now.Ticks);
69
70            for (int i = advTree1.Nodes.Count - 1; i >= 0; i--)
71            {
72                advTree1.Nodes.RemoveAt(i);
73            }
74
75            TimeSpan ts2 = new TimeSpan(DateTime.Now.Ticks);
76
77            TimeSpan ts = ts1.Subtract(ts2).Duration();
78
79            lbltime4.Text = ts.Minutes.ToString() + "分钟" +
80                ts.Seconds.ToString() + "秒" +
81                ts.Milliseconds + "毫秒";
82        }

分别测试1000个节点,5000个节点,10000个节点。

 

 

 

 


上面所取的花费时间 都是多次测试后,取最快的时间。
结果比较:

 性能比较


.net自带的树控件ListBox 性能比较


比较后,DevComponents.AdvTree.AdvTree 的Add()和AddRange()的性能
要比TreeView和ListBox  都要高出很多。

但是DevComponents.AdvTree.AdvTree  有个很耗时的地方。
就是单个移除节点。Nodes.RemoveAt()和Nodes.Remove();

Nodes.Clear()是清除所有节点。速度很快。
但是单个的Remove()节点,速度却相当慢。。

  

posted @ 2023-12-26 11:51  yinghualeihenmei  阅读(125)  评论(0编辑  收藏  举报