參考:Max Degree of Parallelism最大並行度配置
結論:
- 與設置的線程數有關
- 有設置的並行度有關
測試如下:
System.Threading.ThreadPool.SetMinThreads(20, 20);
System.Threading.ThreadPool.SetMinThreads(50, 50);
var list = GetIPByMask(IPAddress.Parse("192.168.10.1"), IPAddress.Parse("255.255.255.0"));
System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
stopwatch.Start();
Parallel.ForEach(list, new ParallelOptions() { MaxDegreeOfParallelism=6}, a =>
{
var status = Ping(a.ToString(), (ip, ex) => Console.WriteLine($"ping {ip},{ex.Message}"), 1000);
Console.WriteLine($"at {DateTime.Now.Second} ping {a.ToString()} {status.ToString()}");
}
);
//foreach (var a in list)
//{
// var status = Ping(a.ToString(), (ip, ex) => Console.WriteLine($"ping {ip},{ex.Message}"), 1000);
// Console.WriteLine($"at {DateTime.Now.Second} ping {a.ToString()} {status.ToString()}");
//}
Console.WriteLine($"平均每秒處理:{(int)Math.Ceiling( list.Count/stopwatch.Elapsed.TotalSeconds)}" );
Console.Read();
@@#
- 不設置線程數,不限制並行數,每秒約9個
- 不使用並行,等到花都謝了
- 增加線程數,
不限制並行數
並行設爲2
並行設爲6