设计模式---并行循环(2-1)

  在.NET体系当中并行循环包含For循环和Foreach循环,并且在LQIN查询语句当中也有效。所以可以用Parellel.For方法遍历整数索引范围,也可以Parellel.Foreach。

  在C#当中顺序for循环一般

int n=......;
for(int i=0;i<n;i++)
{
 //................
}

为了利用多核可以通过调用Parellel.For替换for将循环体转换成一个lambda表达式

int n=........;
Parellel.For(0,n,i=>{
     //...........
})
Parellel.For是一个重载的静态方法(据说有近300种重载方法)

  以下是个例子就用到Parellel.For的方法声明。

Parallel.For(int fromInclusive,
     int toexclusive, 
    Action<int> body)

     在前2个参数指定迭代的限制第一个参数是最低索引(最小值),第二个就是上限(最大值),第三个参数是每次迭代都要调用一次的操作,这个操作迭代索引作为它的参数,对于每个索引,循环体运行一次。第三个参数也可以是委托、匿名方法或普通命名方法。

2、并行ForEach循环

 也先看下C#当中顺序foreach的写法

    IEnumerable<MyObject> myEnumerable=...;
foreach(var obj in myEnumerable)
{
   //...........

}

要利用多核技术就要用Parallel.ForEach方法替换顺序foreach

IEnumerable<myobj> myeum=..........;
Parallel.ForEach(myeum,obj=>{
 //........
});

这个循环是不保证顺序的执行

3.并行LINQ

linq中包含一个Plinq(PLINQ就是并行编程模式)

IEnumerable<myobj> soure=..............;
//LINQ
var query1=from i in soure select Normalize(i);
//PLINQ
var query2=form i in soure.AsParallel();
select Nomalize(i);

上面创建2个枚举对象如果有多核的情况下PLINQ版本就会使用多核。

在遍历所有输入值而不需要返回输入值的情况时也可以用PLINQ的ForAll

IEnumerable<myobj> myenum=........;
myrnum.AsParallel().ForAll(obj=>DoWork(obj));

这里的ForAll的扩展方法等同Plinq里面的parallel.ForEach方法

转载于:https://www.cnblogs.com/jxluowei/archive/2013/05/01/3053609.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值