值类型和引用类型在hashtable里面存取的性能比较
2006-10-19 17:17:30 来源:WEB开发网首先定义两个类:
1 public interface ITest
2 {
3 void M();
4 }
5 public class Test1:ITest
6 {
7 public void M()
8 {
9 }
10 }
11 class Test
12 {
13 public Test()
14 {
15 }
16 } 首先,测试设置的速度hashtable.add()
1static void Main(string[] args)
2 {
3 Hashtable table = new Hashtable();
4
5 System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch();
6 stopWatch.Start();
7 for (int i = 0; i < CompareCount; i++)
8 {
9 table.Add(i,new Test());
10 }
11 stopWatch.Stop();
12
13 for (int i = 0; i < CompareCount; i++)
14 {
15 Test o = table[i] as Test;
16 }
17
18 string t1 = stopWatch.ElapsedTicks.ToString();
19
20 Hashtable table1 = new Hashtable();
21 System.Diagnostics.Stopwatch stopWatch1 = new System.Diagnostics.Stopwatch();
22 stopWatch1.Start();
23 for (int i = 0; i < CompareCount; i++)
24 {
25 table1.Add(i, i);
26 }
27 stopWatch1.Stop();
28
29 for (int i = 0; i < CompareCount; i++)
30 {
31 int o = (int)table1[i];
32 }
33
34 string t2 = stopWatch1.ElapsedTicks.ToString();
35 Hashtable table2 = new Hashtable();
36 System.Diagnostics.Stopwatch stopWatch2 = new System.Diagnostics.Stopwatch();
37 stopWatch2.Start();
38 for (int i = 0; i < CompareCount; i++)
39 {
40 ITest test2 = new Test1();
41 table2.Add(i,test2);
42 }
43
44 stopWatch2.Stop();
45 for (int i = 0; i < CompareCount; i++)
46 {
47 ITest o = table2[i] as ITest;
48 }
49
50 string t3 = stopWatch2.ElapsedTicks.ToString();
51 Console.WriteLine(t1);
52 Console.WriteLine(t2);
53 Console.WriteLine(t3);
54 Console.WriteLine(((double)Convert.ToInt64(t1)/Convert.ToInt64(t2)).ToString());
55 Console.WriteLine(((double)Convert.ToInt64(t3) / Convert.ToInt64(t2)).ToString());
56 Console.Read();
57
58 }测试获取的代码
1static void Main(string[] args)
2 {
3 Hashtable table = new Hashtable();
4
5 for (int i = 0; i < CompareCount; i++)
6 {
7 table.Add(i,new Test());
8 }
9
10 System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch();
11 stopWatch.Start();
12 for (int i = 0; i < CompareCount; i++)
13 {
14 Test o = table[i] as Test;
15 }
16 stopWatch.Stop();
17 string t1 = stopWatch.ElapsedTicks.ToString();
18
19 Hashtable table1 = new Hashtable();
20
21 for (int i = 0; i < CompareCount; i++)
22 {
23 table1.Add(i, i);
24 }
25
26 System.Diagnostics.Stopwatch stopWatch1 = new System.Diagnostics.Stopwatch();
27 stopWatch1.Start();
28 for (int i = 0; i < CompareCount; i++)
29 {
30 int o = (int)table1[i];
31 }
32 stopWatch1.Stop();
33 string t2 = stopWatch1.ElapsedTicks.ToString();
34 Hashtable table2 = new Hashtable();
35
36 for (int i = 0; i < CompareCount; i++)
37 {
38 ITest test2 = new Test1();
39 table2.Add(i,test2);
40 }
41
42 System.Diagnostics.Stopwatch stopWatch2 = new System.Diagnostics.Stopwatch();
43 stopWatch2.Start();
44 for (int i = 0; i < CompareCount; i++)
45 {
46 ITest o = table2[i] as ITest;
47 }
48 stopWatch2.Stop();
49 string t3 = stopWatch2.ElapsedTicks.ToString();
50 Console.WriteLine(t1);
51 Console.WriteLine(t2);
52 Console.WriteLine(t3);
53 Console.WriteLine(((double)Convert.ToInt64(t1)/Convert.ToInt64(t2)).ToString());
54 Console.WriteLine(((double)Convert.ToInt64(t3) / Convert.ToInt64(t2)).ToString());
55 Console.Read();
56
57 }
测试结果
Add
1) 调试(1)
数据类型 |
循环次数 |
执行时间 |
执行时间比例 |
int |
100000 |
227960 |
1 |
class |
100000 |
138122 |
0.6059 |
Interface |
100000 |
103693 |
0.4549 |
调试(2)
数据类型 |
循环次数 |
执行时间 |
执行时间比例 |
int |
100000 |
282564 |
1 |
class |
100000 |
156588 |
0.5542 |
Interface |
100000 |
148623 |
0.5230 |
2)
运行(1)
数据类型 |
循环次数 |
执行时间 |
执行时间比例 |
int |
100000 |
155927 |
1 |
class |
100000 |
191537 |
1.2284 |
Interface |
100000 |
127647 |
0.8186 |
运行(2)
数据类型 |
循环次数 |
执行时间 |
执行时间比例 |
int |
100000 |
151806 |
1 |
class |
100000 |
222375 |
1.4649 |
Interface |
100000 |
256467 |
1.6894 |
运行(3)
数据类型 |
循环次数 |
执行时间 |
执行时间比例 |
int |
100000 |
99465 |
1 |
class |
100000 |
235016 |
2.3628 |
Interface |
100000 |
201519 |
2.0260 |
从上面几个表可以得出,在向Hashtable里面添加数据的时候,当value为值类型的时候最快,interface次之,class慢
2. 查询
1. 调试(1)
数据类型 |
循环次数 |
执行时间 |
执行时间比例 |
int |
100000 |
52360 |
1 |
class |
100000 |
71250 |
1.3608 |
Interface |
100000 |
291566 |
5.5685 |
2.
调试(2)
数据类型 |
循环次数 |
执行时间 |
执行时间比例 |
int |
100000 |
53645 |
1 |
class |
100000 |
55679 |
1.0379 |
Interface |
100000 |
310780 |
5.7932 |
运行(1)
数据类型 |
循环次数 |
执行时间 |
执行时间比例 |
int |
100000 |
53013 |
1 |
class |
100000 |
55414 |
1.0453 |
Interface |
100000 |
282835 |
5.3352 |
运行(2)
数据类型 |
循环次数 |
执行时间 |
执行时间比例 |
int |
100000 |
53647 |
1 |
class |
100000 |
66768 |
1.2446 |
Interface |
100000 |
204599 |
3.8138 |
在查询哈希表的时候,int最快,class次之,interface比较慢
- ››引用 Symbian常见panic
- ››引用类型、数值类型及装箱
- ››引用Amazon图书信息2 ——Word 2007高级应用(十八...
- ››引用Amazon 图书信息1——Word 2007高级应用(十七...
- ››引用.NET Framework Class Library 在线文档2——...
- ››引用.NET Framework Class Library 在线文档1——...
- ››引用一个能发email的JavaMail的例子
- ››引用造型protected和private的困惑
- ››引用外部类对象
- ››引用 造型 protected和private的困惑
- ››引用已定义过的包
- ››类型转化与final修饰符
更多精彩
赞助商链接