首先定义两个类:
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比较慢