背景
以前用Parallel都是直接用,今天在处理pdf时发现不是很快,特别是有时居然卡死了,异常是有处理的,但没有爆出来,不知道问题在哪。
老老实实不用多线程,一个多小时觉得还是太累。
用的话,部分文件又生成不出来。
想了下,可能还是并发度太高导致的。
个人电脑,物理核心是6个,虚拟处理器12个。
设置成 6,47分钟运行完毕。
把并发度改成了跟cpu物理核心一样,才是合理的。
直接贴示例代码
using System;
using System.Diagnostics;
using System.Threading.Tasks;
class Program
{
static void Main()
{
int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
// 获取物理核心数量
int physicalCoreCount = Environment.ProcessorCount;
Console.WriteLine("物理核心:{0}", physicalCoreCount);
// 设置并行度
var options = new ParallelOptions { MaxDegreeOfParallelism = physicalCoreCount };
// 使用并行度为物理核心数量的并行循环
Parallel.ForEach(numbers, options, number =>
{
DoSomeWork(number);
});
stopwatch.Stop();
Console.WriteLine($"Elapsed time: {stopwatch.ElapsedMilliseconds} ms");
Console.ReadLine();
}
private static void DoSomeWork(int number)
{
// 模拟工作负载
System.Threading.Thread.Sleep(100); // 暂停线程以模拟工作
Console.WriteLine($"Processing number {number} on thread {System.Threading.Thread.CurrentThread.ManagedThreadId}");
}
}