2013年8月17日 星期六

Parallel.Foreach取得目前元素之索引位置

想法:在影像處理run pixel上用了Parallel Foreach跟For,比非Parallel的快非常多,但是卻少了Index。在做pixel操作的時候有時需要知道要寫回哪裡。
實作:
            byte[] byteArray = binary.Bytes; //size:307200
            var query = byteArray.Select((val, idx) => new { Index = idx, Value = val });
            int[] result = new int[byteArray.Length];

            //平行 擇一上註解
            Parallel.ForEach(query, b=>
            {  
                if (b.Value >= 255)
                {
                    result[b.Index] = -1;
                }

            } //close lambda expression
                 ); //close method invocation

            //非平行 擇一上註解
            foreach (var b in query)
            {
                if (b.Value >= 255) result[b.Index] = -1;

            }



結論:驚!! Parallel方法花了25ms。非Parallel花了17ms。Parallel for是否又比Parallel foreach?!
             等國科會結束我再來比較一下Parallel for!!!

沒有留言:

張貼留言