Bootstrap

C# Parallel设置最大并发度

背景

以前用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}");
    }
}

;