开始预测的结果是 Task>Delegate>ThreadPool>>Thread。

(一)测试代码

 static async Task<int> AsyncTask(int i)
{
return i;
}
static void TestAsycnTask(int count)
{
for (int i = ; i < count; i++)
{
AsyncTask(i);
}
} static void TestThread(int count)
{
for (int i = ; i < count; i++)
{
new Thread(a =>{}).Start();
}
} private delegate int _delegate(int i);
static void TestDelegate(int count)
{
for (int i = ; i < count; i++)
{
var d = new _delegate(Delegte);
var r = d.BeginInvoke(i, null, null);
}
}
static int Delegte(int i)
{
return i;
} static void TestThreadPools(int count)
{
for(int i = ; i < count; i++)
{
ThreadPool.QueueUserWorkItem(new WaitCallback((object obj) => {}));
}
}
       Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
TestDelegate();
stopWatch.Stop();
Debug.WriteLine("TestDelegate:{0}", stopWatch.Elapsed); stopWatch.Restart();
TestAsycnTask();
stopWatch.Stop();
Debug.WriteLine("TestAsycnTask:{0}", stopWatch.Elapsed); stopWatch.Restart();
TestThreadPools();
stopWatch.Stop();
Debug.WriteLine("TestThreadPools:{0}", stopWatch.Elapsed); stopWatch.Restart();
TestThread();
stopWatch.Stop();
Debug.WriteLine("TestThread:{0}", stopWatch.Elapsed);

(二)测试结果

(三)测试结论

1、线程方式效率是真的低。

2、线程池效率居然比Task还快,不知道为什么,也许测试方式有误。

Delegate、Thread、Task、ThreadPool几种方式创建异步任务性能对比的更多相关文章

  1. 创建多线程的第一种方式——创建Thread子类和重写run方法

    创建多线程的第一种方式——创建Thread子类和重写run方法: 第二种方式——实现Runnable接口,实现类传参给父类Thread类构造方法创建线程: 第一种方式创建Thread子类和重写run方 ...

  2. 两种方式创建Maven项目【方式二】

    1.不勾选Create a simple project,直接点击下一步 2.选择maven-archetype-webapp下一步 3.填写相关信息,点击下一步完成 4.此时会报一个jsp的错误.我 ...

  3. 两种方式创建Maven项目【方式一】

    经常使用maven进行项目的管理,今天整理两种方式创建maven项目及创建过程中碰到的问题怎么解决: 方式一: 1.新建maven项目,点击下一步. 2.勾选Create a simple proje ...

  4. 测开之数据类型&#183; 第3篇《列表推导式、字典推导式、2种方式创建生成器》

    坚持原创输出,点击蓝字关注我吧 作者:清菡 博客:oschina.云+社区.知乎等各大平台都有. 目录 一.列表推导式 二.字典推导式 三.2种方式创建生成器 1.生成器表达式 2.函数里面,通过 y ...

  5. Java的几种创建实例方法的性能对比

    近来打算自己封装一个比较方便读写的Office Excel 工具类,前面已经写了一些,比较粗糙本就计划重构一下,刚好公司的电商APP后台原有的导出Excel实现出现了可怕的性能问题,600行的数据生成 ...

  6. 三种方式创建bean对象在springIOC容器中初始化、销毁阶段要调用的自定义方法

    1. 使用@Bean注解定义initMethod和destroyMethod 所谓initMethod和destroyMethod,是指在springIOC容器中,对于bean对象执行到初始化阶段和销 ...

  7. 3种方式实现KVO并进行对比

    KVO KVO属于设计模式中的观察者模式,在观察者模式中,一个对象任何状态的变更都会通知另外的对改变感兴趣的对象.这些对象之间不需要知道彼此的存在,这其实是一种松耦合的设计.当某个属性变化的时候,我们 ...

  8. WINDOWS硬件通知应用程序的常方法(五种方式:异步过程调用APC,事件方式VxD,消息方式,异步I/O方式,事件方式WDM)

    摘要:在目前流行的Windows操作系统中,设备驱动程序是操纵硬件的最底层软件接口.为了共享在设备驱动程序设计过程中的经验,给出设备驱动程序通知应用程序的5种方法,详细说明每种方法的原理和实现过程,并 ...

  9. (并发编程)进程池线程池--提交任务2种方式+(异步回调)、协程--yield关键字 greenlet ,gevent模块

    一:进程池与线程池(同步,异步+回调函数)先造个池子,然后放任务为什么要用“池”:池子使用来限制并发的任务数目,限制我们的计算机在一个自己可承受的范围内去并发地执行任务池子内什么时候装进程:并发的任务 ...

随机推荐

  1. paloalto防火墙激活许可证和订阅

    1.您必须激活购买的每项服务的许可证,然后才能开始使用防火墙保护网络通信.可用许可证和订阅服务包括 • 威胁阻止 — 提供防病毒.防间谍软件和漏洞保护. • URL 筛选 — 可以创建安全策略,以便根 ...

  2. 11.20 正则表达式 断言(?=exp)

    今天看源代码,研究了一下qz写的这个方法: // 添加逗号分隔,返回为字符串 comma: function(length) { ) length = ; var source = ('' + thi ...

  3. Chapter_4_JAVA作业

    一.类的封装,继承与多态 1.课前预习 1.1 举列现实生活中的封装,以及简述在程序中什么是属性的封装? 1.1.1 将东西捆绑在一起,如集成芯片:高压电线等等 1.1.2 封装就是将属性私有化,提供 ...

  4. 计数排序之python

    话说,一口气不能吃个胖子, 一次性 学习 计数排序, 也确实容易消化不良. 下面,我们逐步学习下计数排序. 1.  已知一个简单列表 l1 = [5, 4, 3], 分析下这个列表的情况 5 > ...

  5. rpm --rebuilddb

    rpm -ivh .....rpm 报Bus Error rpm --rebuilddb

  6. ----XMLHttpRequestAPI简单介绍----

    XMLHttpRequest 使用XMLHttpRequest (XHR)对象可以与服务器交互.您可以从URL获取数据,而无需让整个的页面刷新.这使得Web页面可以只更新页面的局部,而不影响用户的操作 ...

  7. Aspose.Words提示The document appears to be corrupted and cannot be loaded.

    https://download.csdn.net/download/tomeatbj163/10428046

  8. oracle中的日期函数的使用

    TO_DATE格式(以时间:2007-11-02   13:45:25为例) Year:               yy two digits 两位年                显示值:07   ...

  9. canvas用数组方式做出下雨效果

    效果图 1.做出canvas画布和声明一个用来存储雨滴的数组 var c=document.getElementById('myCanvas'); var ctx= c.getContext('2d' ...

  10. 从零开始学习java(一)java基础语法

    从公司裸辞一个月,原本工作是做VB的,现在想从事java:在找工作的时候总是要什么项目经验,多少有些不爽,所有语言都有共 通性,我就不信java有这么难?给自己点时间来学习.坚持一个月自学,看看自己的 ...