值类型和引用类型在hashtable里面存取的性能比较

王朝other·作者佚名  2008-05-30
窄屏简体版  字體: |||超大  

首先定义两个类:

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比较慢

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航