WEB开发网
开发学院WEB开发ASP.NET 值类型和引用类型在hashtable里面存取的性能比较 阅读

值类型和引用类型在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 Test12 {13 public Test()1

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

Tags:类型 引用 类型

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接