• Parallel 试验


    using System;
    using System.Collections.Concurrent;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Linq;
    using System.Collections;
    
    class CQ_EnqueueDequeuePeek
    {
        public readonly static object lockObj = new object();
        static void Main()
        {
            //int n=1000;
            //var s1 = n + n * (n - 1) / 2;
            //Console.WriteLine(s1);
            //Console.WriteLine(1000*1000-s1);
            //Console.ReadKey();
            //return ;
            CancellationTokenSource tokenSource = new CancellationTokenSource();
    
            CancellationToken token = tokenSource.Token;
            List<student> studentList = new List<student>();
            for (long i = 0; i < 1000; i++)
            {
                var stu = new student();
                stu.age = i;
                stu.id = i;
                studentList.Add(stu);
            }
            List<teacher> teacherList = new List<teacher>();
            for (long i = 0; i < 1000; i++)
            {
                var t = new teacher();
                t.id = i;
                t.age = i;
                teacherList.Add(t);
            }
            var ha = new Hashtable();
     
            //                               262151
            Action[] actionList = new Action[1000000];
            ConcurrentBag<relation> relationList = new ConcurrentBag<relation>();
    
            long index = 0;
            foreach (var stu in studentList)
            {
                foreach (var t in teacherList)
                {
                    actionList[index] = () =>
                    {
    
    
                        relation re = new relation();
                        var age1 = stu.age;
                        var age2 = t.age;
                        re.age1 = age1;
                        re.age2 = age2;
                        re.value = age1 * age2;
                        relationList.Add(re);
                        lock (ha)
                        {
                            if (!ha.ContainsKey(re.value))
                            {
                                ha.Add(re.value, re.value);
                            }
                        }
    
                    };
                    index++;
                }
    
    
            }
            Stopwatch s = new Stopwatch();
            s.Start();
            Parallel.ForEach(actionList, (a) =>
            {
                a();
            });
            s.Stop();
            Console.WriteLine("总运行时间:" + s.Elapsed + "
    ");
            Console.WriteLine("运行结果不重复的有如下个:
    ");
            Console.WriteLine(relationList.Select(x => x.value).Distinct().LongCount());
            Console.WriteLine("运行结果以及表达式如下:
    ");
            Console.WriteLine(string.Join("
    ", relationList.Select(x => new { str = "age1:" + x.age1 + " age2:" + x.age2 + "=" + x.value }).Distinct()));
            Console.WriteLine("运行数据大小:" + relationList.Count);
            Console.ReadKey();
        }
    
    }
    
    public class relation
    {
        public long age1;
        public long age2;
        public long value { get; set; }
    }
    public class student
    {
        internal long id;
    
        public student()
        {
            age = 10;
        }
        public long age { get; set; }
    }
    
    public class teacher
    {
        internal long id;
    
        public teacher()
        {
            age = 100;
        }
        public long age { get; set; }
    }
  • 相关阅读:
    分享自制的C#和VB Code互转工具
    C# winform 学习(一)
    C# winform 学习(二)
    C# winform 学习(二)
    C# Winform 学习(四)
    C# Winform 学习(四)
    C# winform 学习(三)
    C# winform 学习(三)
    C# Winform学习(六)
    C# Winform学习(六)
  • 原文地址:https://www.cnblogs.com/kexb/p/6124420.html
Copyright © 2020-2023  润新知