• 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();
            }
    

      

  • 相关阅读:
    dbvisualizer free 9.5.6中文乱码
    Tomcat下编译没哟class源文件
    Microsoft Visual C++ Runtime error解决方法
    eclispe中svn插件的安装和使用教程(二)
    eclipse安装SVN插件的两种方法(一)
    解决eclipse中配置Tomcat中没有server选项
    【原创精品】mac 彻底卸载趋势科技
    【原创】beyond compare 解决文件一样,对比有差异的问题
    Git各大平台(win/Linux/Mac)图形化界面客户端大汇总
    【原创】用python连接thrift Server 去执行sql的问题总汇
  • 原文地址:https://www.cnblogs.com/yuekong2010/p/9274051.html
Copyright © 2020-2023  润新知