当前位置: 首页 > news >正文

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();// 获取虚拟处理器数量, 并行度设定为虚拟处理器/2,让一些给其它任务int physicalCoreCount = Environment.ProcessorCount;int parallelCount = physicalCoreCount / 2;Console.WriteLine("虚拟处理器数量:{0}, 并行度:{1}", physicalCoreCount, parallelCount);// 设置并行度var options = new ParallelOptions { MaxDegreeOfParallelism = parallelCount };// 使用并行度为 虚拟处理器/2 的并行循环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}");}
}

后记:

我前面说的卡死,是控制台一直没有显示,后来改为6个,也还是有这种情况,按了一个ctrl+c,控制台一下子爆出好多的输出,而且没有退出。
可能是程序运行时忽略了控制台这块,并不是并发的问题。

但在程序运行时,无论任务有多繁重,如何让控制台一直有输出,这也是个问题。

可以立即刷新输出缓冲区。

Console.WriteLine("这是输出的消息");
Console.Out.Flush(); // 立即刷新输出缓冲区

http://www.lryc.cn/news/409729.html

相关文章:

  • 【java】力扣 反转字符串中的单词
  • 科学设计程序员面试内容,破解“八股文”之弊
  • 蓝牙BlueZ验证使用记录
  • 【从0制作自己的ros导航小车:上位机篇】02、ros1多机通讯与坐标变换可视化
  • JumpServer关闭admin mfa验证
  • Kafka知识总结(选举机制+控制器+幂等性)
  • 2024非常全的接口测试面试题及参考答案-软件测试工程师没有碰到算我输!
  • python 写一个年会抽奖的demo
  • C++ OpenCV 实现多张图片叠加 叠加文字
  • 用 apifox cli 命令行运行本地接口出现TypeError:Invalid IP address: undefined
  • PyQt6简易案例代码GUI界面小工具——实现增、删、查、改(练手正合适)
  • JavaScript快速入门指南
  • Esbuild介绍
  • UnityShaderUI编辑器扩展
  • 分布式事务——2PC 代码示例
  • vue实现简易的全局加载动画效果
  • Linux网络工具“瑞士军刀“集合
  • Sentinel隔离、降级、授权规则详解
  • C++11 列表初始化与类型声明
  • 缓存策略自定义:Laravel应用性能优化秘籍
  • python连接sqlserver,封装操作
  • 原生PHP/JS自主开发的交友内核框架婚恋交友系统V10
  • 如何在Java、Python、GO程序中使用AI人脸识别API接口
  • 在vue使用MQTT
  • DNS、网关、IP、DHCP
  • vue2 vue3 props 的处理机制
  • C++第十弹 ---- vector的介绍及使用
  • ValueError: invalid literal for int() with base 10: ‘a‘
  • [C++探索]初始化列表,static成员,友元函数,内部类,匿名对象
  • 搭建自己的金融数据源和量化分析平台(二):读取上交所股票列表