zoukankan      html  css  js  c++  java
  • 值类型和引用类型在hashtable里面存取的性能比较

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

  • 相关阅读:
    毕业设计预习:SM3密码杂凑算法基础学习
    毕业设计预习:maxplus2入门教程
    毕业设计预习:VHDL入门知识学习(一) VHDL程序基本结构
    网络对抗课题4.3.1 SQL注入原理与实践
    20135319zl内核模块编译报告
    20135319zl字符集报告
    20135319zl elf文件报告
    20135319zl软件破解报告
    linux内核分析综合总结
    Linux内核分析期中总结
  • 原文地址:https://www.cnblogs.com/jillzhang/p/532763.html
Copyright © 2011-2022 走看看