Parallel.For循环与普通的for循环

前两天看书发现了一个新的循环Parallel.For,这个循环在循环期间可以创建多个线程并行循环,就是说循环的内容是无序的。这让我想到了我前面的牛牛模拟计算是可以用到这个循环的,我前面的牛牛模拟计算是重复同样的操作10万次,可以是无序的,用Parallel.For会节省不少时间,如果是需要有序的循环不要使用Parallel.For。还有一点,如果循环里面的内容很简单,单一,建议还是使用普通的for循环会快一些。

下面是Parallel.For与for的用时对比

 var dt = DateTime.Now;
            var rand = new Random(DateTime.Now.Millisecond);
            for (int i = 0; i < 20; i++)
            {
                Thread.Sleep(rand.Next(100, 1000));
            }
            var standerTime = (DateTime.Now - dt).TotalMilliseconds;
            Console.WriteLine("标准的for循环,耗时{0}毫秒", standerTime);
            dt = DateTime.Now;
            Parallel.For(0, 20, i =>
            {
                Thread.Sleep(rand.Next(100, 1000));
            });
            var parallelTime = (DateTime.Now - dt).TotalMilliseconds;
            Console.WriteLine("并行的for循环,耗时{0}毫秒", parallelTime);
            Console.WriteLine();
            if (standerTime <= parallelTime)
            {
                Console.WriteLine("----------标准的for循环节省{0}毫秒----------", (parallelTime - standerTime));
            }
            else
            {
                Console.WriteLine("----------并行的for循环节省{0}毫秒----------", (standerTime - parallelTime));
            }
            Console.ReadKey();

上面是Parallel.For比较快的情况

下面是for比较快的情况

 Stopwatch sw = new Stopwatch();
            sw.Start();

            ParallelLoopResult result =
            Parallel.For(0, 10000, i =>
            {
                Console.Write("");

            });
            sw.Stop();
            TimeSpan ts2 = sw.Elapsed;
            Console.WriteLine("Parallel.For总共花费{0}ms.", ts2.TotalMilliseconds);

            //
            Stopwatch sw_Eq = new Stopwatch();
            sw_Eq.Start();
            for (int i = 0; i < 10000; i++)
            {
                Console.Write(""); 
            }
            sw_Eq.Stop();
            TimeSpan tssw_Eq = sw_Eq.Elapsed;
            Console.WriteLine("for总共花费{0}ms.", tssw_Eq.TotalMilliseconds);
            Console.ReadKey();

由此可见,Parallel.For创建线程会耗时,如果循环里面的内容太简单的话法尔得不偿失

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值