分享
 
 
 

值类型和引用类型在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比较慢

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有