
Parallel Foreach
C# 中的 Parallel.ForEach 循环在多个线程上运行,并且处理以并行方式进行。 Parallel.ForEach 循环不是 C# 的基本功能,从 C# 4.0 及更高版本开始提供。要使用 Parallel.ForEach 循环,我们需要在 using 指令中导入 System.Threading.Tasks 命名空间。
Foreach h2>
C# 中的 Foreach 循环在单个线程上运行,并且处理按顺序逐一进行。 Foreach 循环是 C# 的基本功能,从 C# 1.0 开始提供。在大多数情况下,它的执行速度比 Parallel.Foreach 慢。
示例 1
static void Main(string[] args){ List alphabets = new List(); alphabets.Add("A"); alphabets.Add("B"); alphabets.Add("C"); alphabets.Add("D"); alphabets.Add("E"); alphabets.Add("F"); alphabets.Add("G"); alphabets.Add("H"); alphabets.Add("I"); alphabets.Add("J"); alphabets.Add("K"); alphabets.Add("L"); alphabets.Add("M"); alphabets.Add("N"); alphabets.Add("O"); alphabets.Add("P"); alphabets.Add("Q"); alphabets.Add("R"); alphabets.Add("S"); alphabets.Add("T"); alphabets.Add("U"); alphabets.Add("V"); alphabets.Add("W"); alphabets.Add("X"); alphabets.Add("Y"); alphabets.Add("Z"); Console.WriteLine("Printing list using foreach loop"); var stopWatch = Stopwatch.StartNew(); foreach (string alphabet in alphabets){ Console.WriteLine("alphabet Name: {0}, Thread Id= {1}", alphabet, Thread.CurrentThread.ManagedThreadId); } Console.WriteLine("foreach loop execution time = {0} seconds", stopWatch.Elapsed.TotalSeconds); Console.WriteLine("Printing list using Parallel.ForEach"); stopWatch = Stopwatch.StartNew(); Parallel.ForEach(alphabets, alphabet => { Console.WriteLine("alphabet Name: {0}, Thread Id= {1}", alphabet, Thread.CurrentThread.ManagedThreadId); } ); Console.WriteLine("Parallel.ForEach() execution time = {0} seconds", stopWatch.Elapsed.TotalSeconds); Console.Read(); Console.ReadLine();}
输出
使用foreach循环打印列表
alphabet Name: A, Thread Id= 1alphabet Name: B, Thread Id= 1alphabet Name: C, Thread Id= 1alphabet Name: D, Thread Id= 1alphabet Name: E, Thread Id= 1alphabet Name: F, Thread Id= 1alphabet Name: G, Thread Id= 1alphabet Name: H, Thread Id= 1alphabet Name: I, Thread Id= 1alphabet Name: J, Thread Id= 1alphabet Name: K, Thread Id= 1alphabet Name: L, Thread Id= 1alphabet Name: M, Thread Id= 1alphabet Name: N, Thread Id= 1alphabet Name: O, Thread Id= 1alphabet Name: P, Thread Id= 1alphabet Name: Q, Thread Id= 1alphabet Name: R, Thread Id= 1alphabet Name: S, Thread Id= 1alphabet Name: T, Thread Id= 1alphabet Name: U, Thread Id= 1alphabet Name: V, Thread Id= 1alphabet Name: W, Thread Id= 1alphabet Name: X, Thread Id= 1alphabet Name: Y, Thread Id= 1alphabet Name: Z, Thread Id= 1foreach loop execution time = 0.0223421 seconds
使用 Parallel.ForEach 打印列表
alphabet Name: A, Thread Id= 1alphabet Name: G, Thread Id= 4alphabet Name: H, Thread Id= 4alphabet Name: I, Thread Id= 4alphabet Name: J, Thread Id= 4alphabet Name: K, Thread Id= 4alphabet Name: L, Thread Id= 4alphabet Name: N, Thread Id= 4alphabet Name: O, Thread Id= 4alphabet Name: P, Thread Id= 4alphabet Name: Q, Thread Id= 4alphabet Name: Y, Thread Id= 6alphabet Name: Z, Thread Id= 6alphabet Name: D, Thread Id= 6alphabet Name: E, Thread Id= 6alphabet Name: F, Thread Id= 6alphabet Name: T, Thread Id= 6alphabet Name: U, Thread Id= 6alphabet Name: V, Thread Id= 6alphabet Name: R, Thread Id= 4alphabet Name: M, Thread Id= 5alphabet Name: S, Thread Id= 7alphabet Name: B, Thread Id= 1alphabet Name: C, Thread Id= 1alphabet Name: W, Thread Id= 6alphabet Name: X, Thread Id= 6Parallel.ForEach() execution time = 0.0559777 seconds
示例2
限制parallel.foreach中的并行性
static class Program{ static void Main(string[] args){ List alphabets = new List(); alphabets.Add("A"); alphabets.Add("B"); alphabets.Add("C"); alphabets.Add("D"); alphabets.Add("E"); alphabets.Add("F"); alphabets.Add("G"); alphabets.Add("H"); alphabets.Add("I"); alphabets.Add("J"); alphabets.Add("K"); alphabets.Add("L"); alphabets.Add("M"); alphabets.Add("N"); alphabets.Add("O"); alphabets.Add("P"); alphabets.Add("Q"); alphabets.Add("R"); alphabets.Add("S"); alphabets.Add("T"); alphabets.Add("U"); alphabets.Add("V"); alphabets.Add("W"); alphabets.Add("X"); alphabets.Add("Y"); alphabets.Add("Z"); Parallel.ForEach( alphabets, new ParallelOptions { MaxDegreeOfParallelism = 2 }, alphabet => { Console.WriteLine("alphabet Name: {0}, Thread Id= {1}", alphabet, Thread.CurrentThread.ManagedThreadId); } ); }}
输出
alphabet Name: N, Thread Id= 4alphabet Name: O, Thread Id= 4alphabet Name: P, Thread Id= 4alphabet Name: A, Thread Id= 1alphabet Name: B, Thread Id= 1alphabet Name: C, Thread Id= 1alphabet Name: Q, Thread Id= 4alphabet Name: R, Thread Id= 4alphabet Name: S, Thread Id= 4alphabet Name: T, Thread Id= 4alphabet Name: U, Thread Id= 4alphabet Name: V, Thread Id= 4alphabet Name: W, Thread Id= 4alphabet Name: X, Thread Id= 4alphabet Name: Y, Thread Id= 4alphabet Name: Z, Thread Id= 4alphabet Name: H, Thread Id= 4alphabet Name: I, Thread Id= 4alphabet Name: J, Thread Id= 4alphabet Name: K, Thread Id= 4alphabet Name: D, Thread Id= 1alphabet Name: L, Thread Id= 4alphabet Name: E, Thread Id= 1alphabet Name: F, Thread Id= 1alphabet Name: G, Thread Id= 1alphabet Name: M, Thread Id= 4
以上就是如何在 C# 中限制 Parallel.ForEach?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1435286.html
微信扫一扫
支付宝扫一扫