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 ...
随机推荐
- "只能在执行Render()的过程中调用RegisterForEventValidation" 解决方案
开发中遇到令人蛋疼的问题: 只能在执行Render()的过程中调用RegisterForEventValidation 当出现的异常的提示: 异常详细信息: System.InvalidOperati ...
- 动态添加组件(XML)
1.利用LayoutInflater的inflate动态加载XMLmLinearLayout = (LinearLayout)findViewById(R.id.LinearLayout_ID);La ...
- Velocity 模板引擎介绍
一.变量 1. 变量定义 #set($name =“velocity”) 2. 变量的使用 在模板文件中使用$name 或者${name} 来使用定义的变量.推荐使用${name} 这种格式,因为在模 ...
- word ppt excel文档转换成pdf
1.把word文档转换成pdf (1).添加引用 using Microsoft.Office.Interop.Word; 添加引用 (2).转换方法 /// <summary> /// ...
- A题笔记(12)
No.1466 代码:https://code.csdn.net/snippets/192091 No.1202 代码:https://code.csdn.net/snippets/192110 ...
- AndroidManifest.xml中的android:name是否带.的区别
如果android:name所指示的类在定义的package="org.crazyit.ui"下,加不加点无所谓:但如果android:name指示的类在在package下的子包中 ...
- IP-MAC绑定导致网络故障
前段时间将一台服务器A的服务迁移至了另外一台服务器B,外网IP地址也顺带迁移过来了,结果网络出现了问题. 其中内网是畅通的,但是外网IP怎么都连不上另外一台路由C(B和C是在一个交换机下的,网段也相同 ...
- Ext.Net学习笔记04:Ext.Net布局
ExtJS中的布局功能很强大,常用的布局有border.accordion.fit.hbox.vbox等,Ext.Net除了将这些布局进行封装以外,更是对border进行了一些非常实用的改进,让我们来 ...
- 如何讓Android系統顯示CJK擴展區漢字
由於一些特殊需要,需要在個人設備上顯示CJK擴展區漢字,經多方詢問並驗證,找到了一下辦法,暫總結如下. 一.電腦上顯示 在電腦(Windows,Linux,Mac等系統)上可以通過安裝「花園明朝字體」 ...
- Centos学习手册——装逼宝典之强制重置密码
---恢复内容开始--- Centos学习手册by RuffianFish; 痞子鱼 近日闲的无聊,而最近又在搞Centos决定写个Centos详细的学习手册,以便自己在长时间没摸Centos的情况下 ...