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

      

  • 相关阅读:
    JavaScript相关知识
    JQ定义
    将博客搬至CSDN
    javascript权威指南笔记(第6章 对象)
    高性能javascript(第一章 加载和运行)
    javascript高级程序设计笔记(第4章 变量、作用域和内存问题)
    浏览器加载渲染HTML、DOM、CSS、 javascript、image、flash、iframe、src属性等资源的顺序总结
    mac 快捷键
    javascript的执行顺序
    javascript高级程序设计笔记(第1章~第3章)
  • 原文地址:https://www.cnblogs.com/yuekong2010/p/9274051.html
Copyright © 2011-2022 走看看