[No000088]并行循环vs普通循环

using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;

namespace Chinese中文排序Sort
{
    internal class Program
    {
        private static List<int> Data = new List<int>();
        /// <summary>
        /// 是否显示执行过程
        /// </summary>
        public static bool ShowProcessExecution = true;
        /// <summary>
        /// 这是普通循环for
        /// </summary>
        private static void Demo1NormaFor()
        {
            List<int> data = Program.Data;
            DateTime dt1 = DateTime.Now;
            for (int i = 0; i < data.Count; i++)
            {
                Thread.Sleep(500);
                if (ShowProcessExecution)
                    Console.WriteLine(data[i]);
            }
            DateTime dt2 = DateTime.Now;
            Console.WriteLine("普通循环For运行时长:{0}毫秒。", (dt2 - dt1).TotalMilliseconds);
        }
        /// <summary>
        /// 这是普通循环foreach
        /// </summary>
        private static void Demo2NormalForeach()
        {
            List<int> data = Program.Data;
            DateTime dt1 = DateTime.Now;
            foreach (var i in data)
            {
                Thread.Sleep(500);
                if (ShowProcessExecution)
                    Console.WriteLine(i);
            }
            DateTime dt2 = DateTime.Now;
            Console.WriteLine("普通循环Foreach运行时长:{0}毫秒。", (dt2 - dt1).TotalMilliseconds);
        }
        /// <summary>
        /// 这是并行计算For
        /// </summary>
        private static void Demo3ParallelFor()
        {
            List<int> data = Program.Data;
            DateTime dt1 = DateTime.Now;
            Parallel.For(0, data.Count, (i) =>
            {
                Thread.Sleep(500);
                if (ShowProcessExecution)
                    Console.WriteLine(data[i]);
            });
            DateTime dt2 = DateTime.Now;
            Console.WriteLine("并行运算For运行时长:{0}毫秒。", (dt2 - dt1).TotalMilliseconds);
        }
        /// <summary>
        /// 这是并行计算ForEach
        /// </summary>
        private static void Demo4ParallelForeach()
        {
            List<int> data = Program.Data;
            DateTime dt1 = DateTime.Now;
            Parallel.ForEach(data, (i) =>
            {
                Thread.Sleep(500);
                if (ShowProcessExecution)
                    Console.WriteLine(i);
            });
            DateTime dt2 = DateTime.Now;
            Console.WriteLine("并行运算ForEach运行时长:{0}毫秒。", (dt2 - dt1).TotalMilliseconds);
        }
        private static void Main(string[] args)
        {
            string sTemp = "0123456789";
            Console.WriteLine(sTemp.Substring(0, 3));//012
            UInt64 uintROWNUM = 0;
            UInt64 sInt = ++uintROWNUM;
            Console.WriteLine(sInt.ToString());//1

            Program.Data = new List<int>();
            for (int i = 0; i < 10; i++)
            {
                Data.Add(i);
            }
            Demo1NormaFor();//5004.347毫秒。
            Demo2NormalForeach();//5003.8115毫秒。
            Demo3ParallelFor();//1089.198毫秒。
            Demo4ParallelForeach();//1021.5196毫秒。

            Console.ReadKey();
        }
    }
}

并行循环不适合排序!!

时间: 2024-10-29 11:17:20

[No000088]并行循环vs普通循环的相关文章

【代码优化】for-each代替普通的for循环或者while循环

对于集合的遍历首选方法是for-each for(Element e :c){ doSomething(e): } 这是1.5版本之后的做法:java1.5之前使用的是Iterator迭代器. 为了弄清楚为啥比普通的for循环或者whlie循环好,请看一下代码 Iterator<Element> i=c.iterator(); while(i.hasNext()){ doSomething(i.next()); } Iterator<Element> i2=c.iterator()

JS中的循环结构、循环嵌套以及函数介绍

[循环结构的步骤]    *①声明循环变量    *②判断循环条件    *③执行循环体(while的{}中的所有代码)操作     *④更新循环变量    *     * 然后,循环执行②③④    *     *     * [JS中循环条件支持的数据类型]    * ①boolean:true 真     false   假    * ②string: 非空字符串为真       空字符串为假    * ③null/NaN/undefined:  全为假    * ④object:全为真 

python循环之for循环与模拟购物车小程序

for循环 for 变量 in 范围:     代码块...         contune                 #跳出本次循环接着执行下一次循环     for 变量 in 范围:         代码块...             break              #跳出本层循环,回到上一个for循环 else:                #其实for循环和while循环都有else子句,不过是当循环完全执行了才会执行     代码块...               

while 循环 于 for循环语句

while 循环 while 循环 while 条件: 如果条件是真的,就继续的循环 如果条件是假的,就停止循环 循环的意思就是让程序重复地执行某些语句,whiler循环就是循环结构的一种,当事先不知道循环该执行多少次,就要用到while循环 Python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务.其基本形式为 while 判断条件: 执行语句…… 这块一定要注意缩进 执行语句可以是单个语句或语句块.判断条件可以是任何表达式,任何非零

关于Qt的事件循环以及QEventLoop的简单使用(QEventLoop::quit()能够终止事件循环,事件循环是可以嵌套的)

http://www.cnblogs.com/-wang-cheng/p/4973021.html 1.一般我们的事件循环都是由exec()来开启的,例如下面的例子: 1 QCoreApplicaton::exec() 2 QApplication::exec() 3 QDialog::exec() 4 QThread::exec() 5 QDrag::exec() 6 QMenu::exec() 这些都开启了事件循环,事件循环首先是一个无限“循环”,程序在exec()里面无限循环,能让跟在ex

for循环和while循环的区别及用法

for循环和while循环是可以互相代替的,比如: for (int i = 0; i<10; i++) {...//插入语句 } 用while来写就是int i = 0;while (i<10) {...//插入语句i++;} for循环比较简洁,会比while更常用些,尤其是用array的时候,很方便的. 但是如果想做无限循环,while更方便点,比如说int i = 1;while (i == 1){ ... } 还有一种do..while,和while差不多,但是do...while在

C#中的循环语句:while循环和for循环(二)

上一篇写了while循环,这一篇就来写一写for循环.相比while循环,for循环要复杂一点,但比while循环更直观一些. for循环的格式为: for(表达式1;循环条件;表达式2) { 循环体 } 表达式1一般用来定义变量:循环条件如果为"true",那么循环继续,反之循环结束,如果是空,就变成死循环了:表达式2一般用于变量的自增或者自减.举个例子,如果在控制台中输出100个你好,用for循环来实现的话,就像这样: for(int i=0; i<100; i++) { C

C#中的循环语句:while循环和for循环(一)

假如我们要做很多事情的时候,比如说我们要输出上百个数字,一个一个输出的话不仅麻烦而且费时多.效率低.这时C#就为我们提供了更为简单的输出方法,即循环.循环类型有多种,这里我比较两种循环方式:while循环&for循环. 首先来说说while循环: While循环的格式非常简单: While(循环条件) { 循环体 } 意思是,当逻辑值是"true"时,循环体就一直不停地循环,直到逻辑值变成"false",才会停.如果逻辑值一直是true,循环就不会停,也就是

for循环、while循环

for循环 for i in range(10): if i >= 5: print(i) else: #break 跳出本层循环 continue #跳出本次循环 print("-----") for i in range(10): print(i) if i== 5: break else: #当循环正常结束时,走else print("done") while循环 count = 0 while True: print("你是风儿我是沙,缠缠绵

GO学习笔记 - Go 只有一种循环结构—— for 循环。

一,Go 只有一种循环结构-- for 循环. 官方教程:https://tour.go-zh.org/flowcontrol/1 Go 只有一种循环结构-- for 循环. 基本的 for 循环包含三个由分号分开的组成部分: 初始化语句:在第一次循环执行前被执行 循环条件表达式:每轮迭代开始前被求值 后置语句:每轮迭代后被执行 初始化语句一般是一个短变量声明,这里声明的变量仅在整个 for 循环语句可见. 如果条件表达式的值变为 false,那么迭代将终止. 注意:不像 C,Java,或者 J