0

MSDN の例を使用すると、次のようになります。

var queryA = from num in numberList.AsParallel()
             select ExpensiveFunction(num); //good for PLINQ

var queryB = from num in numberList.AsParallel()
             where num % 2 > 0
             select num; //not as good for PLINQ

私のサンプルプログラム:

static void Main(string[] args)
{
   // ThreadPool.SetMinThreads(100, 100);

        var numberList = new List<int>();
        for (int i = 0; i <= 1000; i++)
        {
            numberList.Add(i);
        }
        Stopwatch sw = new Stopwatch();
        sw.Start();
        var queryA = from num in numberList
                     select ExpensiveFunction(num); //good for PLINQ
        var c = queryA.ToList<int>();
        sw.Stop();
        Console.WriteLine(sw.ElapsedMilliseconds);
        sw.Reset();
        sw.Start();
        var queryB = from num in numberList.AsParallel()
                     select ExpensiveFunction(num); //good for PLINQ
        c = queryB.ToList<int>();
        sw.Stop();
        Console.WriteLine(sw.ElapsedMilliseconds);
        Console.ReadKey();
}

static int ExpensiveFunction(int a)
{
    a = a + 100 - 9 + 0 + 98;
    // Console.WriteLine(a);
    return a;
}

結果は次のとおりです。

7
41

AsParallel()使用しないよりも使用が遅いのはなぜですか?

4

1 に答える 1

2

あなたExpensiveFunctionは本当にコンピュータにとって高価な機能ではありません。

簡単な計算は非常に高速に実行できます。

おそらくThread.Sleep(500);代わりに試してみてください。これにより、実際の高価な関数の効果をシミュレートする 0.5 秒間一時停止するように CPU に指示します。

編集- 遅い理由は、並列処理に伴うオーバーヘッドが実際の計算よりも多くの作業を伴うためです。より良い説明については、この回答を参照してください

于 2013-06-28T14:42:32.463 に答える