我试图使用PLINQ加快一个简单的模拟,但我设法慢下来,而不是(未注释进行AsParallel运行速度较慢):我该如何篡改PLINQ? (并行化简单/快速计算)
class Program
{
private static readonly Random Random = new Random();
private static IEnumerable<Tuple<double, double>> GetNextPair(int pairs)
{
for (int i = 0; i < pairs; i++)
yield return new Tuple<double, double>(Random.NextDouble(), Random.NextDouble());
}
private static double RunSimPlinq(int count)
{
return
GetNextPair(count)
//.ToArray()
//.AsParallel()
.Count(tuple =>
{
//Thread.Sleep(10);
return tuple.Item1*tuple.Item1 + tuple.Item2*tuple.Item2 <= 1d;
})*4d/count;
}
static void Main()
{
Stopwatch sw = new Stopwatch();
sw.Start();
Console.WriteLine(RunSimPlinq(100));
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
Console.Read();
}
}
我唯一的猜测至于其原因是争论的可圈可数(或相反,复制它)。
PS。输出应该是PI的估计值。
如果您填写一个数组,用它来代替GetNextPair(),这有多大差别?由于收益可能会缓冲。 –
你到底在做什么?我看不到任何AsParallel() – Aron
@Aron你看不到行///。AsParallel()'? – svick