关于c#并行的疑问

Parallel的For适用于单个作业耗时长,且没有前后作业依赖或其他锁的情况。
你的这个测试并不能很好的体现它的优势。

■网友
本质原因:
for(int i=0;i\u0026lt;1000000000;++i){ var x = 0; x += i;}关于c#并行的疑问

里面内容直接没了……
Parallel.For其实里面内容也没了,不过内部分组并行省不了。
MSVC效果更明显:
关于c#并行的疑问

编译器:“哦哦哦,我晓得!你就想返回0嘛!直说嘛!”
其实我就是来推销一下宇宙第一IDE……在学习的过程中,合理使用这个东西:
关于c#并行的疑问

对理解编译器和运行机制非常有帮助。

■网友
并不是没效果,差了一个数量级呢,你忘了reset~_~
----当然,是并行的方式慢了一个数量级
原因呢,就是你给了一个极不利于并行计算的场景:循环节里做的事太小(甚至release时你那两句话完全不生成代码),这样cpu都花在线程调度上了,偏偏循环次数又很多
如果你想要找并行计算占优的例子,构造一个CPU密集型的循环节就可以了,比如下边这个。我这里的耗时是2916:5276。如果你把我用的常量“8”放大,最终速度比会达到理论值,即1:cpu个数
using System;using System.Diagnostics;using System.Linq;namespace ConsoleApplication1{ class Program { static void Main(string args) { var aa = Stopwatch.StartNew(); Enumerable.Range(0, 8).AsParallel().ForAll(i =\u0026gt; { var sum = 0L; sum += func(); }); Console.WriteLine(aa.ElapsedMilliseconds); aa.Reset(); aa.Start(); for (var i = 0; i \u0026lt; 8; i++) { var sum = 0L; sum += func(); } Console.WriteLine(aa.ElapsedMilliseconds); Console.ReadKey(); } static long func() { return Enumerable.Range(0, 50000000).Select(i =\u0026gt; (long)i).Sum(); } }}
■网友
这种跑2秒的例子没多大区别很正常吧。。
楼主试下矩阵乘法玩玩

■网友
涉及会阻塞的才快,一般这种提速在数据库快速插入的时候可能体现明显
■网友
【关于c#并行的疑问】 楼主用多线程吧,开个100说不定就飞起来了


    推荐阅读