using System;
using System.Threading.Tasks;
namespace AppCode
{
class Program
{
static object obj = new object();
static long lvalue = 0;
static void Main(string[] args)
{
System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
Console.ForegroundColor = ConsoleColor.Red;
stopwatch.Start();
Call();
Call1();
Call2();
Console.WriteLine("串行總用 " + stopwatch.ElapsedMilliseconds + "ms");
stopwatch = new System.Diagnostics.Stopwatch();
Console.ForegroundColor = ConsoleColor.Green;
stopwatch.Start();
Parallel.Invoke(Call, Call1, Call2);
Console.WriteLine("並行總用 " + stopwatch.ElapsedMilliseconds + "ms");
//這一段是最大並行度 MaxDegreeOfParallelism=1次,結果其實就是串行的結果
stopwatch = new System.Diagnostics.Stopwatch();
Console.ForegroundColor = ConsoleColor.DarkRed;
stopwatch.Start();
Parallel.Invoke(new ParallelOptions { MaxDegreeOfParallelism=1 },Call, Call1, Call2);
Console.WriteLine("並行的第一種用法,最大並行度1次,並行總用 " + stopwatch.ElapsedMilliseconds + "ms");
//這一段是最大並行度多次 MaxDegreeOfParallelism=2,MaxDegreeOfParallelism這個可以根據需要設置
stopwatch = new System.Diagnostics.Stopwatch();
Console.ForegroundColor = ConsoleColor.DarkYellow;
stopwatch.Start();
Parallel.Invoke(new ParallelOptions { MaxDegreeOfParallelism = 2 }, Call, Call1, Call2);
Console.WriteLine("並行的第一種用法,最大並行度多次,並行總用 " + stopwatch.ElapsedMilliseconds + "ms");
//這一段沒有根據最大並行度配置,所以會自動調度系統資源,如cpu、內存,如果不配理想狀態下系統的內存、cpu會達到百分百
stopwatch = new System.Diagnostics.Stopwatch();
Console.ForegroundColor = ConsoleColor.DarkCyan;
stopwatch.Start();
Parallel.Invoke(() => Call(), () => Call1(), () => Call2());
Console.WriteLine("並行的第二種用法,最大並行度多次,並行總用 " + stopwatch.ElapsedMilliseconds + "ms");
//這一段沒有根據最大並行度配置,所以會自動調度系統資源,如cpu、內存,如果不配理想狀態下系統的內存、cpu會達到百分百
stopwatch = new System.Diagnostics.Stopwatch();
Console.ForegroundColor = ConsoleColor.DarkGreen;
stopwatch.Start();
Parallel.Invoke(() =>
{
Call();
},
Call1,
delegate () { Call2(); Console.WriteLine("寫你想要的東西"); });
Console.WriteLine("並行的第三種用法,最大並行度多次,並行總用 " + stopwatch.ElapsedMilliseconds + "ms");
Console.Read();
}
private static void Call()
{
System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
stopwatch.Start();
int temp = int.MaxValue / 100;
string value = "";
for (int i = 0; i < temp; i++)
{
value = i.ToString();
}
Console.WriteLine("第一次,循環" + temp + "次" + stopwatch.ElapsedMilliseconds + "ms");
}
private static void Call1()
{
System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
stopwatch.Start();
int temp = int.MaxValue / 1000;
string value = "";
for (int i = 0; i < temp; i++)
{
value = i.ToString();
}
Console.WriteLine("第二次,循環" + temp + "次" + stopwatch.ElapsedMilliseconds + "ms");
}
private static void Call2()
{
System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
stopwatch.Start();
int temp = int.MaxValue / 10000;
string value = "";
for (int i = 0; i < temp; i++)
{
value = i.ToString();
}
Console.WriteLine("第三次,循環" + temp + "次" + stopwatch.ElapsedMilliseconds + "ms");
}
}
}
Parallel.Invoke的用法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.