首页 游戏 软件 资讯 排行榜 专题
首页
科技数码
C#中Parallel.For与普通for循环的5个关键差异解析

C#中Parallel.For与普通for循环的5个关键差异解析

热心网友
64
转载
2026-03-16

循环是编程中的一种基础结构,主要用于遍历处理数组、集合或其他数据结构中的元素。其中,for循环是最常见的类型,但随着多核处理器的普及,.NET 4中新增了抽象线程类Parallel。Parallel.For()方法与C#的for循环语句类似,同样是多次执行同一任务,但通过Parallel.For()可以实现并行运行。

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈

在C#编程中,循环结构是处理数据集合的基础工具。for循环作为最常见的循环类型,能够有效遍历数组或集合中的元素。随着多核处理器的发展,.NET 4引入了Parallel类,其中的Parallel.For()方法虽然与for循环功能相似,但采用了并行执行的方式,可以充分利用多核处理器的计算能力。

1、单线程与多线程

最明显的区别在于执行方式。传统的for循环采用单线程执行,每次迭代都是按照顺序逐个处理。而Parallel.For利用了多线程技术,可以在不同线程上同时执行多个迭代,从而更有效地发挥多核处理器的性能优势。

for案例

for (int i = 0; i < 10; i++){// 执行代码}

Parallel.For使用案例

Parallel.For(0, 10, i =>{// 并行执行的代码});

2、性能

由于Parallel.For采用了多线程处理,在处理大规模数据时通常比传统的for循环更高效。特别是当迭代内部的计算相对独立且可并行时,Parallel.For的性能优势尤为明显。但需要注意的是,多线程并非没有代价,它可能带来额外的线程管理开销、资源竞争等问题,因此在一些场景下,传统的for循环可能更合适。

下面我们对比一下两者的性能,分别循环1亿个元素的数组,代码如下:

int[] data = new int[100000000]; // 1亿个元素的数组
// 初始化数组
for (int i = 0; i < data.Length; i++){
data[i] = i + 1;
}
// 普通的for循环
Stopwatch normalWatch = Stopwatch.StartNew();
for (int i = 0; i < data.Length; i++){
data[i] = data[i] * data[i];
}
normalWatch.Stop();
Console.WriteLine("普通for循环耗时:" + normalWatch.ElapsedMilliseconds + " 毫秒");
// Parallel.For循环
Stopwatch parallelWatch = Stopwatch.StartNew();
Parallel.For(0, data.Length, i =>{
data[i] = data[i] * data[i];
});
parallelWatch.Stop();
Console.WriteLine("Parallel.For循环耗时:" + parallelWatch.ElapsedMilliseconds + " 毫秒");

结果如下:

图片图片

当然如果少量的数据的话,对比结果可能相反,大家感兴趣可以试一试。

3、线程安全性

在使用Parallel.For时,需要特别注意对共享资源的访问是否是线程安全的。由于Parallel.For使用了多个线程并行执行迭代,如果迭代内部涉及到对共享资源的修改,就可能产生竞态条件等线程安全问题。在这种情况下,需要采取适当的同步机制来确保线程安全,例如使用lock关键字、Interlocked类等。

4、控制粒度

使用Parallel.For可以更方便地控制并行执行的粒度。通过调整参数,可以指定并行度,即同时执行的线程数量。这使得可以根据实际情况调整并行执行的程度,以达到最佳的性能和资源利用率。

5、异常处理

在Parallel.For中,对异常的处理相对复杂一些。由于多个迭代可能并行执行,如果其中一个迭代抛出了异常,那么该异常将会被捕获并存储起来,然后等待所有其他迭代完成后再重新抛出。因此,在使用Parallel.For时,需要格外注意异常处理,以确保程序的稳定性和可靠性。

结语

Parallel.For和传统的for循环各有优劣。Parallel.For适用于处理大规模数据且迭代内部计算相对独立的情况,能够充分利用多核处理器的性能优势,但需要额外注意线程安全性和异常处理。而传统的for循环则更简单直接,适用于简单的迭代任务或者对并行性能要求不高的场景。在实际应用中,需要根据具体情况选择合适的循环方式,以达到最佳的性能和效果。

参考:微软正式版

来源:https://www.51cto.com/article/838155.html
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关攻略

C#中Parallel.For与普通for循环的5个关键差异解析
科技数码
C#中Parallel.For与普通for循环的5个关键差异解析

循环是一种基本的编程结构,用于迭代处理数组、集合或其他数据结构中的元素。其中,for循环是最常见的一种,但随着多核处理器的普及,在 NET 4中新增的抽象线程类Parallel。Parallel F

热心网友
03.16
揭秘C#命令模式:核心原理与实战应用案例详解
科技数码
揭秘C#命令模式:核心原理与实战应用案例详解

在C 中,命令模式通过促进对象之间的解耦,有助于构建更加模块化、灵活和可维护的代码库。 命令模式是一种行为设计模式,它将请求转化为独立对象,封装了与请求相关的所有信息。此对象能够灵活应对不同的请求,

热心网友
02.27
C#命令模式详解:实战应用与高效编程技巧
科技数码
C#命令模式详解:实战应用与高效编程技巧

在 C 中,命令模式通过促进对象之间的解耦,有助于构建更加模块化、灵活和可维护的代码库。 命令模式是一种行为设计模式,它将请求转化为独立对象,封装了与请求相关的所有信息。此对象能够灵活应对不同的请

热心网友
02.13
C# foreach修改集合时为何异常?深入解析原因与解决
科技数码
C# foreach修改集合时为何异常?深入解析原因与解决

在实际编码中,明确操作意图、选择匹配的循环结构,不仅能规避异常,更能提升代码的可读性与可维护性。 在C 日常开发中,开发者常会遇到一个典型场景:当尝试在foreach循环体内对List执行添加、删除

热心网友
02.10
C#集合操作新语法:用展开运算符(..)简化代码实战
科技数码
C#集合操作新语法:用展开运算符(..)简化代码实战

从 C 13 起(需配合 NET 9),语言新增了展开运算符( ),让集合操作变得像写自然语言一样直白:你想“把这几个东西放一起”,就真的能直接“放一起”。 在 C 中拼接数组、合并列表、复

热心网友
01.13

最新APP

凡人传说
凡人传说
角色扮演 03-30
恶魔秘境
恶魔秘境
角色扮演 03-29
猫和老鼠华为
猫和老鼠华为
休闲益智 03-29
暗黑之地
暗黑之地
角色扮演 03-28
你比我猜
你比我猜
休闲益智 03-26

热门推荐

vivo Pad6 Pro发布:首款4K原彩屏配骁龙8,售4499元起
网络安全
vivo Pad6 Pro发布:首款4K原彩屏配骁龙8,售4499元起

3月30日消息,今晚除了手机之外,vivo还发布了全新的旗舰平板——vivo Pad6 Pro。行业首发13 2英寸4K原彩屏,分辨率3840×2160,347PPI,支持1-144Hz LTPS自

热心网友
03.30
WPS表格提取括号内容:3步掌握MID函数实战用法
电脑教程
WPS表格提取括号内容:3步掌握MID函数实战用法

WPS表格中提取括号内容有四种方法:一、单对英文小括号用FIND+MID;二、中英文括号通用需SUBSTITUTE预处理;三、多对括号取最后一对需REVERSESTRING反向查找

热心网友
03.30
聚焦AI文创与跨境,“数智苏豪”新街口OPC社区启幕
科技数码
聚焦AI文创与跨境,“数智苏豪”新街口OPC社区启幕

3月30日,南京新街口核心商圈,苏豪大厦一楼广场上机器人迎宾起舞,充满科技感。由苏豪资产运营集团与南京新街口金融商务区管理委员会(以下简称“新街口管委会”)共同打造的“数智苏豪”新街口OPC社区揭牌

热心网友
03.30
1.9亿年薪背后:又一位车企CEO薪酬为何大幅上涨?
科技数码
1.9亿年薪背后:又一位车企CEO薪酬为何大幅上涨?

电 动 知 家消 息,近日,据外媒报道,据福特汽车日前发布的一份文件,该公司首席执行 官吉姆·法利2025年的总薪酬大幅增长了11%,达到约2752万美元(约1 9亿元人民币),这是其自2020年末

热心网友
03.30
美议员为何急于拉黑中国机器人却暗留后门?
科技数码
美议员为何急于拉黑中国机器人却暗留后门?

白宫里,一台人形机器人缓步走入东厅,与美国“第一夫人”并肩亮相,动作仍带着明显的机械感;仅仅一天后,国会山上,这种“会走路的机器”却被划为潜在安全威胁,写进立法提案。这是上周美国上演的荒诞一幕。两党

热心网友
03.30