2015年1月2日金曜日

AsParallel

■public static ParallelQuery AsParallel
(this IEnumerable source);
// 概要:
// クエリの並列化を有効にします。
//
// パラメーター:
// source:
// System.Linq.ParallelQuery に変換する System.Collections.Generic.IEnumerable
//
// 型パラメーター:
// TSource:
// source の要素の型。
//
// 戻り値:
// ParallelEnumerable 拡張メソッドにバインドされる System.Linq.ParallelQuery としての
// source。
//
// 例外:
// System.ArgumentNullException:
// source が null 参照 (Visual Basic の場合は Nothing) です。



using System;
using System.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] a = new int[100000000];
            a[a.Length - 1] = 1;
            var start1 = DateTime.Now;
            var bySerial = a.Count(c => c == 1);
            Console.WriteLine("Serial  :{0}", DateTime.Now - start1);

            var start2 = DateTime.Now;
            var byParallel = a.AsParallel().Count(c => c == 1);
            Console.WriteLine("Parallel:{0}", DateTime.Now - start2);
        }
    }
}

2コアのPCで実行したとき下記のような差がでました。
Serial :00:00:01.0920000
Parallel:00:00:00.7488000

並列化された場合どの順に処理が完了するか不明なため
順番が保障されなくなる点など気をつける必要が出てきますね。

0 件のコメント:

コメントを投稿