zoukankan      html  css  js  c++  java
  • Hashtable与Dictionary比较

      项目需要存储Tcp连接对象,考虑使用Hashtable或者Dictionary存储。Hashtable在查询方面有优势,Dictionary在确定类型下不需要拆箱与装箱有优势。于是,写了个demo对两个存储对象进行了插入、查询、删除、遍历的速度比较。

            static Hashtable hashtable = new Hashtable();
            static Dictionary<string, ConnectedClient> keyValuePairs = new Dictionary<string, ConnectedClient>();
    
            static void Init()
            {
                Stopwatch stopwatch = new Stopwatch();
                stopwatch.Start();
                for(int i = 0; i < 100000; i++)
                {
                    ConnectedClient connectedClient = new ConnectedClient(new TcpClient());
                    hashtable.Add(i.ToString(),connectedClient);
                }
                stopwatch.Stop();
                Console.WriteLine(string.Format("Hashtable插入100000耗时{0}。", stopwatch.ElapsedTicks));
                stopwatch.Restart();
                for (int i = 0; i < 100000; i++)
                {
                    ConnectedClient connectedClient = new ConnectedClient(new TcpClient());
                    keyValuePairs.Add(i.ToString(), connectedClient);
                }
                stopwatch.Stop();
                Console.WriteLine(string.Format("Dictionary插入100000耗时{0}。", stopwatch.ElapsedTicks));
    
                stopwatch.Restart();
                var result = (ConnectedClient)hashtable["70000"];
                stopwatch.Stop();
                Console.WriteLine(string.Format("Hashtable搜索一条耗时{0}。", stopwatch.ElapsedTicks));
    
                stopwatch.Restart();
                result = keyValuePairs["70000"];
                stopwatch.Stop();
                Console.WriteLine(string.Format("Dictionary搜索一条耗时{0}。", stopwatch.ElapsedTicks));
    
                stopwatch.Restart();
                hashtable.Add("9000000", new ConnectedClient(new TcpClient())); ;
                stopwatch.Stop();
                Console.WriteLine(string.Format("Hashtable插入一条耗时{0}。", stopwatch.ElapsedTicks));
    
                stopwatch.Restart();
                keyValuePairs.Add("9000000", new ConnectedClient(new TcpClient())); ;
                stopwatch.Stop();
                Console.WriteLine(string.Format("Dictionary插入一条耗时{0}。", stopwatch.ElapsedTicks));
    
                stopwatch.Restart();
                hashtable.Remove("9000000");;
                stopwatch.Stop();
                Console.WriteLine(string.Format("Hashtable删除一条耗时{0}。", stopwatch.ElapsedTicks));
    
                stopwatch.Restart();
                keyValuePairs.Remove("9000000");;
                stopwatch.Stop();
                Console.WriteLine(string.Format("Dictionary删除一条耗时{0}。", stopwatch.ElapsedTicks));
    
                stopwatch.Restart();
                foreach (var key in hashtable.Keys)
                {
                    ((ConnectedClient)hashtable[key]).outCount--;
                }
                Console.WriteLine(string.Format("Hashtable遍历耗时{0}。", stopwatch.ElapsedTicks));
                stopwatch.Stop();
    
                stopwatch.Restart();
                foreach (var key in keyValuePairs.Keys)
                {
                    keyValuePairs[key].outCount--;
                }
                Console.WriteLine(string.Format("Dictionary遍历耗时{0}。", stopwatch.ElapsedTicks));
                stopwatch.Stop();
    
                Console.ReadLine();
            }
    

      

  • 相关阅读:
    输入年月日,输出这一天是这一年的多少天
    判断体重是否标准 男标准=身高-100±3 女标准=身高-110±3
    if 条件运算符
    24小时换算成12小时&&判断正负数
    运算符(编程)
    定义变量
    基础知识
    java线程阻塞中断与LockSupport使用介绍(转)
    01背包问题--动态规划解法(2)(转载)
    01背包问题--动态规划解法
  • 原文地址:https://www.cnblogs.com/yuekong2010/p/9274051.html
Copyright © 2011-2022 走看看