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); }
相关文章推荐
- 【C#】值类型VS引用类型and现金VS存折
- c#多维数组
- C#字符串比较
- C#学习日记08---数据类型 之 字符类型
- C#字符串和正则表达式
- C#学习日记07---数据类型 之 decimal类型
- C#学习日记06---数据类型 之 浮点数类型
- C#访问网页、保存网页
- C#学习日记05---数据类型 之 布尔类型
- [c#]tabControl 点击tabpage触发事件
- C#程序如何实现设置系统WIFI共享
- C#如何调用以管理员身份运行的cmd命令提示符
- 验证(C#和正则表达式)
- Ftp上传下载 C#
- C#学习日记04---数据类型 之 整数类型
- C#委托/Lambda表达式/事件
- C#学习之路,学习笔记 2.6 变量的命名规则、常量 及 关键字
- C#学习之路,学习笔记 2.5 +运算符 与 变量的格式化输出
- C#自定义窗口
- C# 自定义集合