C# Queue、List、LinkedList 性能对比

最近需要用到一个先进先出的缓存列队,对比了一下几个可能用的类的性能。。

向添加100w个数据,然后每次弹出100个,输出用时

cs 复制代码
            Queue<int> q = new Queue<int>();
            List<int> l = new List<int>();
            LinkedList<int> ll = new LinkedList<int>();

            var count =  1000 * 1000;
            var t = DateTime.Now;
            for (int i = 0; i < count; i++)
            {
                q.Enqueue(i);
            }
            Console.WriteLine("添加Enqueue用时:" + (DateTime.Now - t).TotalMilliseconds);

            t = DateTime.Now;
            for (int i = 0; i < count; i++)
            {
                l.Add(i);
            }
            Console.WriteLine("添加List用时:" + (DateTime.Now - t).TotalMilliseconds);

            t = DateTime.Now;
            for (int i = 0; i < count; i++)
            {
                ll.AddLast(i);

            }
            Console.WriteLine("添加LinkedList用时:" + (DateTime.Now - t).TotalMilliseconds);


            t = DateTime.Now;
            while (q.Count > 0)
            {
                for (int i = 0; i < 100; i++)
                {
                    q.Dequeue();
                }

            }
            Console.WriteLine("弹出Enqueue用时:" + (DateTime.Now - t).TotalMilliseconds);

            t = DateTime.Now;
            while (l.Count > 0)
            {
                l.RemoveRange(0, 100);
            }
            Console.WriteLine("弹出List用时:" + (DateTime.Now - t).TotalMilliseconds);

            t = DateTime.Now;

            while (ll.Count > 0)
            {
                for (int i = 0; i < 100; i++)
                {
                    ll.RemoveFirst();
                }
            }
            Console.WriteLine("弹出LinkedList用时:" + (DateTime.Now - t).TotalMilliseconds);

输出结果

复制代码
添加Enqueue用时:10.9944
添加List用时:6.9974
添加LinkedList用时:97.7324
弹出Enqueue用时:7.9959
弹出List用时:699.3315
弹出LinkedList用时:8.0135

所以,结果显而易见,应该用 Queue

相关推荐
rzl0223 分钟前
java web5(黑马)
java·开发语言·前端
jingling55536 分钟前
面试版-前端开发核心知识
开发语言·前端·javascript·vue.js·面试·前端框架
m0_687399841 小时前
写一个Ununtu C++ 程序,调用ffmpeg API, 来判断一个数字电影的视频文件mxf 是不是Jpeg2000?
开发语言·c++·ffmpeg
爱上语文1 小时前
Redis基础(5):Redis的Java客户端
java·开发语言·数据库·redis·后端
A~taoker1 小时前
taoker的项目维护(ng服务器)
java·开发语言
萧曵 丶1 小时前
Rust 中的返回类型
开发语言·后端·rust
hi星尘2 小时前
深度解析:Java内部类与外部类的交互机制
java·开发语言·交互
看到我,请让我去学习2 小时前
Qt编程-qml操作(js,c++,canvas)
开发语言·qt
橘子编程2 小时前
Python-Word文档、PPT、PDF以及Pillow处理图像详解
开发语言·python
Ronin3052 小时前
【C++】类型转换
开发语言·c++