当前位置: 首页 > 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(); // 立即刷新输出缓冲区

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Qwen-Audio部署实战】Qwen-Audio-Chat模型之FastApi部署实战
  • Fréchet Inception Distance(FID)图像生成技术指标
  • 《AM-Bi-LSTM: Adaptive Multi-Modal Bi-LSTM for Sequential Recommendation》
  • MATLAB学习日志DAY23
  • Java | Leetcode Java题解之第283题移动零
  • Git操作指令(已完结)
  • DolphinScheduler学习
  • C++11中的右值引用以及移动构造等
  • 将 magma example 改写成 cusolver example eqrf
  • FFmpeg模块详解:深入理解多媒体框架的构成
  • docker查询容器与镜像,删除容器与镜像
  • 泛域名绑定到wordpress网站二级目录
  • 《基于深度学习的目标检测算法综述论文的解读》
  • systemverilog中package的使用
  • DjangoRF实战-2-apps-users
  • C++11: atomic 头文件
  • CentOS 7 防火墙操作
  • iOS 颜色设置看我就够了
  • Laravel Telescope:优雅的应用调试工具
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 聊聊hikari连接池的leakDetectionThreshold
  • 聊聊redis的数据结构的应用
  • 面试总结JavaScript篇
  • 前端工程化(Gulp、Webpack)-webpack
  • - 转 Ext2.0 form使用实例
  • ​​​​​​​​​​​​​​Γ函数
  • !$boo在php中什么意思,php前戏
  • #Java第九次作业--输入输出流和文件操作
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • $nextTick的使用场景介绍
  • (3) cmake编译多个cpp文件
  • (Python) SOAP Web Service (HTTP POST)
  • (分布式缓存)Redis分片集群
  • (剑指Offer)面试题34:丑数
  • (三)模仿学习-Action数据的模仿
  • (转)大型网站架构演变和知识体系
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .Net 路由处理厉害了
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .net流程开发平台的一些难点(1)
  • .Net中间语言BeforeFieldInit
  • @SpringBootApplication 注解
  • [].shift.call( arguments ) 和 [].slice.call( arguments )
  • [23] 4K4D: Real-Time 4D View Synthesis at 4K Resolution
  • [240621] Anthropic 发布了 Claude 3.5 Sonnet AI 助手 | Socket.IO 拒绝服务漏洞
  • [AX]AX2012 AIF(四):文档服务应用实例
  • [caffe(二)]Python加载训练caffe模型并进行测试1
  • [cocos2d-x]关于CC_CALLBACK
  • [Codeforces] combinatorics (R1600) Part.2
  • [github配置] 远程访问仓库以及问题解决
  • [Golang] goroutine
  • [HEOI2013]ALO
  • [JavaWeb]——获取请求参数的方式(全面!!!)