相互之间的接纳

相互之间的接纳

Parallel类  在System.Threading.Tasks 命名空间下

Parallel.Invoke 并行的选用,

Parallel类  在System.Threading.Tasks 命名空间下

下边有多少个法子,这里讲一下Invoke的用法

永利皇宫 1

下边我们定义几个主意方便测试

先自定义Response 幸免并行的时候占用导致结果生成

HttpResponse MyResponse = System.Web.HttpContext.Current.Response;

        public void ResponseWrite1()
        {
            string str = "1:";
            for (int i = 0; i < 10; i++)
            {
                System.Threading.Thread.Sleep(15);
                str += i;
            }
            lock (MyResponse)
            {
                MyResponse.Write(str + "<br /><br />");
            }
        }

        public void ResponseWrite2()
        {
            string str = "2:";
            for (int i = 0; i < 10; i++)
            {
                System.Threading.Thread.Sleep(15);
                str += i;
            }
            lock (MyResponse)
            {
                MyResponse.Write(str + "<br /><br />");
            }
        }

        public void ResponseWrite3()
        {
            string str = "3:";
            for (int i = 0; i < 10; i++)
            {
                System.Threading.Thread.Sleep(15);
                str += i;
            }
            lock (MyResponse)
            {
                MyResponse.Write(str + "<br /><br />");
            }
        }

接下去起头接纳并行

能够透过以下措施并行施行不带参数的秘技(☆☆ Invoke只好传入方法名)

            System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
            watch.Start();
            ResponseWrite1();
            ResponseWrite2();
            ResponseWrite3();

            watch.Stop();
            MyResponse.Write($"<br />普通串行耗时:{ watch.Elapsed.Milliseconds }毫秒<br /><br />");



            System.Diagnostics.Stopwatch watch2 = new System.Diagnostics.Stopwatch();
            watch2.Start();

            Parallel.Invoke(ResponseWrite1, ResponseWrite2,ResponseWrite3);

            watch2.Stop();
            MyResponse.Write($"<br />使用并行耗时:{ watch2.Elapsed.Milliseconds }毫秒<br /><br />");

 实践结果如下:(☆☆☆ 特别供给专注的是由此Invoke实践的依次是不固定的)

永利皇宫 2

我们可以见到那儿实行同一的代码 并行显著尤其节省时间

 

 

 

那大家想要推行带参数的法门有未有措施啊?

答案自然是足以的

咱俩得以由此选用拉姆da 的方法来实行(当然也能够运用委托的法子)

先我们测试的点子加个参数

        public void ResponseWrite1(string param1 = "test")
        {
            string str = param1 + "1:";
            for (int i = 0; i < 10; i++)
            {
                System.Threading.Thread.Sleep(15);
                str += i;
            }
            lock (MyResponse)
            {
                MyResponse.Write(str + "<br /><br />");
            }
        }

经过lambda试行带参的法门

             

       System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();           
        watch.Start();
            ResponseWrite1();
            ResponseWrite2();
            ResponseWrite3();

            watch.Stop();
            MyResponse.Write($"<br />普通串行耗时:{ watch.Elapsed.Milliseconds }毫秒<br /><br />");



            System.Diagnostics.Stopwatch watch2 = new System.Diagnostics.Stopwatch();
            watch2.Start();

            Parallel.Invoke(
                () => ResponseWrite1("哈哈哈"),
                () => ResponseWrite2(),
                delegate() {
            ResponseWrite3();
          }

            );

            watch2.Stop();
            MyResponse.Write($"<br />使用并行耗时:{ watch2.Elapsed.Milliseconds }毫秒<br /><br />");

永利皇宫 3

Parallel.Invoke方法唯有在具备办法漫天执行达成后才会回来,固然在方式推行进度中出现卓殊Invoke也会完结

故此我们在采用 Parallel.Invoke的时候也要思念之中的主意执行时间是否差不离,假诺有1个艺术运转时刻比较长,也会拖累其余艺术(因为Invoke会等具有办法实行完成后才会回到)

 

 

 以上正是Parallel.Invoke的用法,即便有不规则或许能够改正的地点,接待留言

 

并行的选取, Parallel类
在System.Threading.Tasks 命名空间下
上面有多少个主意,这里讲一下Invoke的用法
下边大家定义多少个章程方便测…

上边有多少个形式,这里讲一下Invoke的用法

永利皇宫 4

上面我们定义多少个办法方便测试

先自定义Response 幸免并行的时候占用导致结果生成

HttpResponse MyResponse = System.Web.HttpContext.Current.Response;

        public void ResponseWrite1()
        {
            string str = "1:";
            for (int i = 0; i < 10; i++)
            {
                System.Threading.Thread.Sleep(15);
                str += i;
            }
            lock (MyResponse)
            {
                MyResponse.Write(str + "<br /><br />");
            }
        }

        public void ResponseWrite2()
        {
            string str = "2:";
            for (int i = 0; i < 10; i++)
            {
                System.Threading.Thread.Sleep(15);
                str += i;
            }
            lock (MyResponse)
            {
                MyResponse.Write(str + "<br /><br />");
            }
        }

        public void ResponseWrite3()
        {
            string str = "3:";
            for (int i = 0; i < 10; i++)
            {
                System.Threading.Thread.Sleep(15);
                str += i;
            }
            lock (MyResponse)
            {
                MyResponse.Write(str + "<br /><br />");
            }
        }

永利皇宫 ,接下去发轫运用并行

可以透过以下方式并行推行不带参数的格局(☆☆ Invoke只可以传入方法名)

            System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
            watch.Start();
            ResponseWrite1();
            ResponseWrite2();
            ResponseWrite3();

            watch.Stop();
            MyResponse.Write($"<br />普通串行耗时:{ watch.Elapsed.Milliseconds }毫秒<br /><br />");



            System.Diagnostics.Stopwatch watch2 = new System.Diagnostics.Stopwatch();
            watch2.Start();

            Parallel.Invoke(ResponseWrite1, ResponseWrite2,ResponseWrite3);

            watch2.Stop();
            MyResponse.Write($"<br />使用并行耗时:{ watch2.Elapsed.Milliseconds }毫秒<br /><br />");

 试行结果如下:(☆☆☆ 非常供给专注的是通过Invoke实施的逐一是不固定的)

永利皇宫 5

咱俩得以看看那儿施行同一的代码 并行显著更加节省时间

 

 

 

网站地图xml地图