C# 4.0 并行计算部分(附件有图)
C# 4.0 并行计算部分
沿用微软的写法,System.Threading.Tasks.::.Parallel类,提供对并行循环和区域的支持。我们会用到的方法有For,ForEach,Invoke。
一、简单使用
首先我们初始化一个List用于循环,这里我们循环10次。(后面的代码都会按这个标准进行循环)
Program .Data = new List <int >();
for (int i = 0; i < 10; i++)
{
Data.Add(i);
}
下面我们定义4个方法,分别为for,foreach,并行For,并行ForEach。并测试他们的运行时长。
/// <summary>
/// 是否显示执行过程
/// </summary>
public bool ShowProcessExecution = false ;
/// <summary>
/// 这是普通循环for
/// </summary>
private void Demo1()
{
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 void Demo2()
{
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("普通循环For运行时长:{0}毫秒。" , (dt2 - dt1).TotalMilliseconds);
}
/// <summary>
/// 这是并行计算For
/// </summary>
private void Demo3()
{
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 void Demo4()
{
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);
}