前两天看书发现了一个新的循环Parallel.For,这个循环在循环期间可以创建多个线程并行循环,就是说循环的内容是无序的。这让我想到了我前面的牛牛模拟计算是可以用到这个循环的,我前面的牛牛模拟计算是重复同样的操作10万次,可以是无序的,用Parallel.For会节省不少时间,如果是需要有序的循环不要使用Parallel.For。还有一点,如果循环里面的内容很简单,单一,建议还是使用普通的for循环会快一些。

下面是Parallel.For与for的用时对比

var dt = DateTime.Now;
var rand = new Random(DateTime.Now.Millisecond);
for (int i = 0; i < 20; i++)
{
Thread.Sleep(rand.Next(100, 1000));
}
var standerTime = (DateTime.Now - dt).TotalMilliseconds;
Console.WriteLine("标准的for循环,耗时{0}毫秒", standerTime);
dt = DateTime.Now;
Parallel.For(0, 20, i =>
{
Thread.Sleep(rand.Next(100, 1000));
});
var parallelTime = (DateTime.Now - dt).TotalMilliseconds;
Console.WriteLine("并行的for循环,耗时{0}毫秒", parallelTime);
Console.WriteLine();
if (standerTime <= parallelTime)
{
Console.WriteLine("----------标准的for循环节省{0}毫秒----------", (parallelTime - standerTime));
}
else
{
Console.WriteLine("----------并行的for循环节省{0}毫秒----------", (standerTime - parallelTime));
}
Console.ReadKey();
上面是Parallel.For比较快的情况

下面是for比较快的情况

Stopwatch sw = new Stopwatch();
sw.Start();

ParallelLoopResult result =
Parallel.For(0, 10000, i =>
{
Console.Write("");

});
sw.Stop();
TimeSpan ts2 = sw.Elapsed;
Console.WriteLine("Parallel.For总共花费{0}ms.", ts2.TotalMilliseconds);

//
Stopwatch sw_Eq = new Stopwatch();
sw_Eq.Start();
for (int i = 0; i < 10000; i++)
{
Console.Write("");
}
sw_Eq.Stop();
TimeSpan tssw_Eq = sw_Eq.Elapsed;
Console.WriteLine("for总共花费{0}ms.", tssw_Eq.TotalMilliseconds);
Console.ReadKey();
由此可见,Parallel.For创建线程会耗时,如果循环里面的内容太简单的话法尔得不偿失

Parallel.For循环与普通的for循环的更多相关文章

  1. jquery不能是使用普通的for循环 因为普通的for循环通过下表获取对象 如果通过下表获取对象的话 会转成dom对象

    jquery不能是使用普通的for循环 因为普通的for循环通过下表获取对象 如果通过下表获取对象的话 会转成dom对象

  2. forEach循环对集合进行循环时,需判断是否为null;

    分析forEach的源码会发现:foreach源码例子: public class Foreach { public static void main(String[] args) { List< ...

  3. sqlserver中的循环遍历(普通循环和游标循环)

    sql 经常用到循环,下面介绍一下普通循环和游标循环 1.首先需要一个测试表数据Student

  4. Javascript基础系列之(六)循环语句(for循环)

    如果您希望一遍又一遍地运行相同的代码,并且每次的值都不同,那么使用循环是很方便的. document.write(cars[0] + "<br>"); document ...

  5. Oracle PL/SQL中的循环处理(sql for循环)

    今天来说下Oracle中的循环迭代处理,因为从自己的博客统计中看到,不少网友都搜索了关键字"SQL FOR循环",所以打算在这里说下个人的理解. PL/SQL也和我们常用的编程语言 ...

  6. 循环嵌套,while循环,穷举迭代循环

    一.循环嵌套 简单的就是说,在一个for循环里嵌入多个小for循环. 其中,在打矩形.三角形和乘法口诀表之类的题目中,大for循环一般表示的是行数,其余的小for循环式每一行中的内容. 二.while ...

  7. jQuery中each的用法之退出循环和结束本次循环

    jQuery中each的用法之退出循环和结束本次循环 jQuery中each类似于javascript的for循环 但不同于for循环的是在each里面不能使用break结束循环,也不能使用conti ...

  8. 慕课网-安卓工程师初养成-4-14 Java 循环语句之多重循环

    来源:http://www.imooc.com/code/1497 循环体中包含循环语句的结构称为多重循环.三种循环语句可以自身嵌套,也可以相互嵌套,最常见的就是二重循环.在二重循环中,外层循环每执行 ...

  9. Java 循环语句之多重循环

    循环体中包含循环语句的结构称为多重循环.三种循环语句可以自身嵌套,也可以相互嵌套,最常见的就是二重循环.在二重循环中,外层循环每执行一次,内层循环要执行一圈. 如下所示: 例如:使用 * 打印长方形: ...

随机推荐

  1. 模块化规范:CMD和AMD的区别

    https://www.zhihu.com/question/20351507/answer/14859415 AMD(异步模块定义) 是 RequireJS 在推广过程中对模块定义的规范化产出.CM ...

  2. 面试题:栈的push和pop序列是否一致

    参数是两个数组,arr1,arr2 stack stack = new Stack() for(int i=0;j=0;i<arr1.length;i++){ stack.push(arr[i] ...

  3. Kafka Streams开发入门(3)

    背景 上一篇我们介绍了Kafka Streams中的消息过滤操作filter,今天我们展示一个对消息进行转换Key的操作,依然是结合一个具体的实例展开介绍.所谓转换Key是指对流处理中每条消息的Key ...

  4. 排序算法的c++实现——归并排序

    归并排序是典型分治思想的代表——首先把原问题分解为两个或多个子问题,然后求解子问题的解,最后使用子问题的解来构造出原问题的解. 对于归并排序,给定一个待排序的数组,首先把该数组划分为两个子数组,然后对 ...

  5. python中生成JWK(json web token)

    #需要安装pyjwt import jwt import time # 使用 sanic 作为restful api 框架 def create_token(request): grant_type ...

  6. 项目Beta冲刺 用户试用报告

    课程: 软件工程1916|W(福州大学) 作业要求: 项目Beta冲刺 团队名称: 火鸡堂 作业目标: 火鸡堂 队员学号 队员姓名 博客地址 备注 221600111 彼术向 http://www.c ...

  7. 用户体验报告(Echo)

    班级:软件工程1916|W 作业:项目Beta冲刺(团队) 团队名称:Echo 团队博客汇总 队员学号 队员姓名 个人博客地址 备注 221600136 张至锋 https://www.cnblogs ...

  8. python 二、八、十六进制之间的快速转换

    一.进制转换 1.2 十进制转二进制 bin(18)--> '0b10010'     去掉0b就是10010    即为十进制18转二进制是10010 十进制转八进制oct(18) --> ...

  9. 加深对 JavaScript This 的理解

    我相信你已经看过很多关于 JavaScript 的 this 的谈论了,既然你点进来了,不妨继续看下去,看是否能帮你加深对 this 的理解. 最近在看 <You Dont Know JS> ...

  10. Tasking

    Put your plan on the tick list, and set the completion time limit, daily repetition, etc. according ...