• 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创建线程会耗时,如果循环里面的内容太简单的话法尔得不偿失

  • 相关阅读:
    HDU 4644 BWT (KMP)
    常数的值类型问题
    HDU 1395 2^x mod n = 1 (欧拉函数)
    HDU 5384 Danganronpa(AC自动机)
    9.自己实现linux中的tree
    8.底层文件库
    7.标准文件库
    7.gcc的使用
    5.文件I/O
    4.vim操作
  • 原文地址:https://www.cnblogs.com/h2zZhou/p/11941613.html
Copyright © 2020-2023  润新知