一个功能更强大,性能更高的树控件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()节点,速度却相当慢。。