Performance Test of List<T>, LinkedList<T>, Queue<T>, ConcurrentQueue<T>
//Test Group 1
{
var watch = Stopwatch.StartNew();
var list = new List<int>();
for (int j = ; j < ; j++)
{
list.Insert(, j);
}
watch.Stop();
Console.WriteLine("Insert First::List::" + watch.ElapsedMilliseconds);
} {
var watch = Stopwatch.StartNew();
var list = new LinkedList<int>();
for (int j = ; j < ; j++)
{
list.AddFirst(j);
}
watch.Stop();
Console.WriteLine("Insert First::LinkedList::" + watch.ElapsedMilliseconds);
} //Test Group 2:
{
var watch = Stopwatch.StartNew();
var list = new List<int>();
for (int j = ; j < ; j++)
{
list.Add(j);
}
watch.Stop();
Console.WriteLine("Append::List::" + watch.ElapsedMilliseconds);
} {
var watch = Stopwatch.StartNew();
var list = new LinkedList<int>();
for (int j = ; j < ; j++)
{
list.AddLast(j);
}
watch.Stop();
Console.WriteLine("Append::LinkedList::" + watch.ElapsedMilliseconds);
} {
var watch = Stopwatch.StartNew();
var queue = new Queue<int>();
for (int j = ; j < ; j++)
{
queue.Enqueue(j);
}
watch.Stop();
Console.WriteLine("Enqueue::Queue::" + watch.ElapsedMilliseconds);
} {
var watch = Stopwatch.StartNew();
var queue = new ConcurrentQueue<int>();
for (int j = ; j < ; j++)
{
queue.Enqueue(j);
}
watch.Stop();
Console.WriteLine("Enqueue::ConcurrentQueue::" + watch.ElapsedMilliseconds);
} //Test Group 3:
{
var list = new List<int>();
for (int j = ; j < ; j++)
{
list.Add(j);
} var watch = Stopwatch.StartNew();
for (int j = ; j < ; j++)
{
var value = list[];
list.RemoveAt();
}
watch.Stop();
Console.WriteLine("RemoveAt(0)::List::" + watch.ElapsedMilliseconds);
} { var list = new LinkedList<int>();
for (int j = ; j < ; j++)
{
list.AddLast(j);
} var watch = Stopwatch.StartNew();
for (int j = ; j < ; j++)
{
var value = list.First.Value;
list.RemoveFirst();
}
watch.Stop();
Console.WriteLine("RemoveFirst::LinkedList::" + watch.ElapsedMilliseconds);
} {
var queue = new Queue<int>();
for (int j = ; j < ; j++)
{
queue.Enqueue(j);
} var watch = Stopwatch.StartNew();
for (int j = ; j < ; j++)
{
var value = queue.Dequeue();
}
watch.Stop();
Console.WriteLine("Dequeue::Queue::" + watch.ElapsedMilliseconds);
} {
var queue = new ConcurrentQueue<int>();
for (int j = ; j < ; j++)
{
queue.Enqueue(j);
} var watch = Stopwatch.StartNew();
for (int j = ; j < ; j++)
{
int value;
queue.TryDequeue(out value);
}
watch.Stop();
Console.WriteLine("TryDequeue::ConcurrentQueue::" + watch.ElapsedMilliseconds);
}
List::Insert First::57328 ms
List::Add::8 ms
List::RemoveAt(0)::56700 ms
LinkedList::AddFirst::34 ms
LinkedList::Append::100 ms
LinkedList::RemoveFirst::16 ms
Queue::Enqueue::15 ms
Queue::Dequeue::10 ms
ConcurrentQueue::Enqueue::138 ms
ConcurrentQueue::TryDequeue::18 ms
Performance Test of List<T>, LinkedList<T>, Queue<T>, ConcurrentQueue<T>的更多相关文章
- C# 队列Queue,ConcurrentQueue,BlockingCollection 并发控制lock,Monitor,信号量Semaphore
什么是队列? 队列Queues,是一种遵循先进先出的原则的集合,在.netCore中微软给我们提供了很多个类,就目前本人所知的有三种,分别是标题提到的:Queue.ConcurrentQueue.Bl ...
- LinkedList 实现 Queue
package cn.com.example; import java.util.LinkedList; /** * Created by Jack on 2017/3/8. */ public cl ...
- Java集合详解2:LinkedList和Queue
今天我们来探索一下HashMap和HashTable机制与比较器的源码. 具体代码在我的GitHub中可以找到 https://github.com/h2pl/MyTech 喜欢的话麻烦star一下哈 ...
- LinkedList与Queue
https://blog.csdn.net/u013087513/article/details/52218725
- C#的队列(Queue,ConcurrentQueue)和堆栈(Stack,ConcurrentStack)
一.Queue 表示对象的先进先出(FIFO)集合,非线程安全 常用方法 Dequeue 入队 Enqueue 出队 Contains 队列中是否存在某元素 Clear 清空队列 封装: /// ...
- 计算机程序的思维逻辑 (39) - 剖析LinkedList
上节我们介绍了ArrayList,ArrayList随机访问效率很高,但插入和删除性能比较低,我们提到了同样实现了List接口的LinkedList,它的特点与ArrayList几乎正好相反,本节我们 ...
- java集合类深入分析之Queue篇
简介 Queue是一种很常见的数据结构类型,在java里面Queue是一个接口,它只是定义了一个基本的Queue应该有哪些功能规约.实际上有多个Queue的实现,有的是采用线性表实现,有的基于链表实现 ...
- Java中的队列Queue,优先级队列PriorityQueue
队列Queue 在java5中新增加了java.util.Queue接口,用以支持队列的常见操作.该接口扩展了java.util.Collection接口. Queue使用时要尽量避免Collecti ...
- 【Java源码分析】LinkedList类
LinkedList<E> 源码解读 继承AbstractSequentialList<E> 实现List<E>, Deque<E>, Cloneabl ...
随机推荐
- [置顶] html学习笔记,锚点,超链接,table布局,表头,h,sub,blockquote,ul,li,ol.dl,加入收藏,打印,弹出窗口
<a name="shouye"></a> <strong>strong加粗</strong> <br> 没有加粗 &l ...
- JVM笔记5:Class文件结构
Class文件是一组以8位字节为基础单位的二进制流,包含多个数据项目(数据项目的顺序,占用的字节数均由规范定义),各个数据项目严格按照顺序紧凑的排列在Class文件中,不包含任何分隔符,使得整个Cla ...
- angular下H5上传图片(可多张上传)
最近做的项目中用到了angular下上传图片功能,在做的过程中遇到了许多问题,最终都得以解决 angular上传时和普通上传时过程差不多,只不过是要不一些东西转化为angular的东西. 1.ng-f ...
- hibernate篇章六--demo(Hibernate之第1解之-hibernate_demo_1)
准备工作做好了,开始Hibernate: 1:建立包:package:dao.model.service.util包: 2:开始model实体类Student:id,sname生成getter/set ...
- iOS NSNumber语法糖
BOOL equal; NSNumber * num1 = [NSNumber numberWithInteger:]; NSNumber * num2 = @; equal = [num1 isEq ...
- 使用RequireJS优化Web应用前端
require.js官网:http://requirejs.org/docs/download.html 一篇不错的文章:http://www.csdn.net/article/2012-09-27/ ...
- LigerUI API
参数列表 参数名 类型 描述 默认值 title String 表格标题 null width String|Int 宽度值,支持百分比 'auto' height String|Int 高度值,支持 ...
- (转)C++静态库与动态库
转自:http://www.cnblogs.com/skynet/p/3372855.html C++静态库与动态库 这次分享的宗旨是——让大家学会创建与使用静态库.动态库,知道静态库与动态库的区别, ...
- MinGW 仿 linux 开发环境
MinGW 默认安装 MSYS.通常打开的 MinGW Shell 其实 MSYS,MinGW 作为一个组件存在. MSYS -- Minimal SYStem,是一个 Bourne Shell 解释 ...
- Android学习5—布局简介
Android界面的布局主要有四种,分别为RelativeLayout.LinearLayout.TableLayout.FrameLayout,接下来分别介绍这些布局如何使用(为了简单起见,接下来的 ...