本篇文章给大家分享的是有关怎么在c#中使用Parallelx实现并行和多线程编程,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
一、平行的使用
1, Parallel.Invoke
这是最简单,最简洁的将串行的代码并行化。
在这里先讲一个知识点,就是秒表的使用,最近有一些人说找不到秒表,秒表到底是什么东西,今天就来说明一下。
秒表在系统。诊断命名控件,要使用它就要先引用这个命名空间。
其使用方法如下:
var stopWatch =, new 秒表();,,,//创建一个秒表实例 stopWatch.Start();,,,//开始计时 stopWatch.Stop();,,,//停止计时 stopWatch.Reset();,,//重置秒表 stopWatch.Restart();,//重新启动被停止的秒表 stopWatch.ElapsedMilliseconds //获取秒表从开始到现在的时间差,单位是毫秒以前>本次用到的就这么多知识点,想了解更多关于秒表的,去百度一下吧,网上有很多资料。
下面进入整体,开始介绍平行。调用方法,废话不多说了,首先新建一个控制台程序,添加一个类,代码如下:
public class ParallelDemo ,{ ,private Stopwatch Stopwatch =, new 秒表(); ,public void  Run1 () ,{ ,thread . sleep (2000); ,Console.WriteLine (“Task  1, is cost 2, sec"); ,} ,public void  Run2 () ,{ ,thread . sleep (3000); ,Console.WriteLine (“Task 2, is cost 3, sec"); ,} ,public void  ParallelInvokeMethod () ,{ ,stopWatch.Start (); ,Parallel.Invoke (Run1, Run2); ,stopWatch.Stop (); ,Console.WriteLine (“Parallel  run “, +, stopWatch.ElapsedMilliseconds +,“,女士!”); , ,stopWatch.Restart (); ,Run1 (); ,Run2 (); ,stopWatch.Stop (); ,Console.WriteLine (“Normal  run “, +, stopWatch.ElapsedMilliseconds +,“,女士!”); ,} }代码很简单,首先新加一个类,在类中写了两个方法,Run1和Run2,分别等待一定时间,输出一条信息,然后写了一个测试方法ParallelInvokeMethod,分别用两种方法调用Run1和Run2,然后在主方法中调用,下面来看一下运行时间如何:
大家应该能够猜的到,正常调用的话应该是5秒多,而Parallel.Invoke方法调用用了只有3秒,也就是耗时最长的那个方法,可以看出方法是并行执行的,执行效率提高了很多。
2,平行。
这个方法和对循环的功能相似,下面就在类中添加一个方法来测试一下吧。代码如下:
public void ParallelForMethod () ,{ ,stopWatch.Start (); ,for (int 小姐:=,0;,小姐:& lt;, 10000;,我+ +) ,{ ,for (int j =, 0;, j & lt;, 60000;, j + +) ,{ int 才能;sum =, 0; sum 才能+=,我; ,} ,} ,stopWatch.Stop (); ,Console.WriteLine (“NormalFor  run “, +, stopWatch.ElapsedMilliseconds +,“,女士!”); ,stopWatch.Reset (); ,stopWatch.Start (); ,Parallel.For (0,, 10000,, item =比; ,{ ,for (int j =, 0;, j & lt;, 60000;, j + +) ,{ int 才能;sum =, 0; +=sum 才能;项目; ,} ,}); ,stopWatch.Stop (); ,Console.WriteLine (“ParallelFor  run “, +, stopWatch.ElapsedMilliseconds +,“,女士!”); , 以前,}>写了两个循环,做了一些没有意义的事情,目的主要是为了消耗CPU时间,同理在主方法中调用,运行结果如下图:
可以看的到,Parallel.For所用的时间比单纯的为快了1秒多,可见提升的性能是非常可观的。那么,是不是平行的。为在任何时候都比的要快呢?答案当然是“不”是,要不然微软还留为干着嘛?
下面修改一下代码,添加一个全局变量num,代码如下:
public void ParallelForMethod () ,{ ,var obj =, new 对象(); ,long num =, 0; ,ConcurrentBagbag =, new ConcurrentBag 怎么在c#中使用Parallelx实现并行和多线程编程