并行化LINQ查询

using System;
using System.Text;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using System.Diagnostics;
using System.Linq;

namespace Test
{
    class Program
    {
        public static string DateTime_Now_ToString()
        {
            return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
        }


        /// <summary>
        /// 并行化LINQ查询
        /// </summary>
        static void Main()
        {
            var list = GetTypes();
Console.WriteLine(); Console.WriteLine(DateTime_Now_ToString()); Stopwatch sw
= new Stopwatch(); sw.Start(); var query = from t in list select WorkProcessing(t);//耗时循环 Console.WriteLine(query.Count().ToString()); foreach (var item in query) { //线程Id:9, 线程池:False, 后台线程:False PrintInfo(item); } sw.Stop(); Console.WriteLine("LINQ耗时:{0},计时:{1}", sw.ElapsedMilliseconds.ToString(), sw.ElapsedTicks.ToString()); Console.WriteLine(); Console.WriteLine(DateTime_Now_ToString()); sw.Reset(); sw.Start(); var parallelQuery = from t in ParallelEnumerable.AsParallel(list) select WorkProcessing(t); Console.WriteLine(parallelQuery.Count().ToString()); foreach (var item in parallelQuery) { //线程Id:9, 线程池:False, 后台线程:False PrintInfo(item); } sw.Stop(); Console.WriteLine("ParallelEnumerable.AsParallel()耗时:{0},计时:{1}", sw.ElapsedMilliseconds.ToString(), sw.ElapsedTicks.ToString()); Console.WriteLine(); Console.WriteLine(DateTime_Now_ToString()); sw.Reset(); sw.Start(); var parallelQuery2 = from t in list.AsParallel() select WorkProcessing(t); Console.WriteLine(parallelQuery2.Count().ToString()); parallelQuery2.ForAll(PrintInfo); //线程Id:12, 线程池:True, 后台线程:True sw.Stop(); Console.WriteLine("AsParallel()耗时:{0},计时:{1}", sw.ElapsedMilliseconds.ToString(), sw.ElapsedTicks.ToString()); Console.WriteLine(); Console.WriteLine(DateTime_Now_ToString()); sw.Reset(); sw.Start(); var query2 = from t in list.AsParallel().AsSequential() select WorkProcessing(t); Console.WriteLine(query2.Count().ToString()); foreach (var item in query2) { //线程Id:9, 线程池:False, 后台线程:False PrintInfo(item); } sw.Stop(); Console.WriteLine("AsParallel().AsSequential()耗时:{0},计时:{1}", sw.ElapsedMilliseconds.ToString(), sw.ElapsedTicks.ToString()); Console.WriteLine("\n执行完成" + DateTime_Now_ToString()); Console.ReadLine(); } private static void PrintInfo(string typeName) { Thread.Sleep(TimeSpan.FromMilliseconds(100)); } private static string WorkProcessing(string typeName) { Thread.Sleep(TimeSpan.FromMilliseconds(100)); return typeName; } private static IEnumerable<string> GetTypes() { string str = "xmlsch"; //"xmlschemaobject"; var result = from assembly in AppDomain.CurrentDomain.GetAssemblies() from type in assembly.GetExportedTypes() where type.Name.StartsWith(str, StringComparison.CurrentCultureIgnoreCase) select type.Name; return result; } } } /* 2016-08-30 11:46:54 85 LINQ耗时:25548,计时:59746259 2016-08-30 11:47:20 85 ParallelEnumerable.AsParallel()耗时:12843,计时:30035306 2016-08-30 11:47:33 85 AsParallel()耗时:6648,计时:15547847 2016-08-30 11:47:39 85 AsParallel().AsSequential()耗时:25550,计时:59749639 执行完成2016-08-30 11:48:05 */

 

posted @ 2016-08-30 15:06  茗::流  阅读(145)  评论(0)    收藏  举报
如有雷同,纯属参考。如有侵犯你的版权,请联系我。