您的位置:首页 > 编程语言 > C#

C# 中Parallel类的使用

2015-10-03 23:19 435 查看
using System;
using System.Drawing;
using OpenTK;
using OpenTK.Graphics;
using OpenTK.Graphics.OpenGL;
using OpenTK.Input;
using System.Runtime.InteropServices;
using System.Threading;
using System.Threading.Tasks;
using System.Linq;

namespace Example
{
class MyApplication
{
public static void Main()
{
Parallel.For(0, 500000000000000, i =>
{
Console.WriteLine(i);
});
}
}
}


这样的for循环就是使用了多线程,和c++里的OpenMP类似。

运行图:



然后是运行时的cpu占用率:



下图是正常的使用for循环输出时的cpu占用率:



可见,对cpu的使用效率提升了很多。

也可以使用ParallelLoopState.Break来进行控制

如下:

using System;
using System.Drawing;
using OpenTK;
using OpenTK.Graphics;
using OpenTK.Graphics.OpenGL;
using OpenTK.Input;
using System.Runtime.InteropServices;
using System.Threading;
using System.Threading.Tasks;
using System.Linq;

namespace Example
{
class MyApplication
{
public static void Main()
{
Parallel.For(0, 500000000000000,(i,loopstate) =>
{
Console.WriteLine(i);
if (i == 100)      //当i==100时跳出
loopstate.Break();
});
}
}
}


PLINQ

使用起来很简单,就是在集合后加个AsParallel()。

public static void Main()
{
var numbers = Enumerable.Range(0, 100);
var result = numbers.AsParallel().AsOrdered().Where(i => i % 2 == 0);
foreach (var i in result)
Console.WriteLine(i);
}


但这样得到的第二个数组并不是按顺序排的:



想得到按顺序的可以在后面再加个AsOrdered():

public static void Main()
{
var numbers = Enumerable.Range(0, 100);
var result = numbers.AsParallel().AsOrdered().Where(i => i % 2 == 0);
foreach (var i in result)
Console.WriteLine(i);
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: