for,foreach,Parallel.for与Parallel.foreach相关性能分析
业务背景
1.需要从ES表中获取大量数据,需要一次获取23张表中数据内容,其中涵盖了订单数据,通信连接数据,状态信息数据,测量数据以及配置信息等数据的获取,内部每次获取均需要进行相应接口调用,从而获取数据。
2.优化之前采用的是for,foreach循环进行相应数据获取,接口响应时间较慢。
parallel并发编程相关介绍
概念
- Parallel类是对线程的一个很好地抽象,该类位于System.Threading.Task 命名空间中,提供了数据的任务的并行性。
- Parallel类定义了并行的for和foreach的静态方法。对于c#的for和foreach而言,循环从一个线程中运行。Parallel类使用多个任务,因此使用多个线程去完成本次作业。
- Parallel.For()和Parallel.Foreach()方法在每次迭代中调用相同的业务代码,而Parallel.Invoke()方法允许同时调用不同的方法。
- Parallel.Invoke()用于任务并行性,Parallel.Foreach()用于数据并行性。
优化代码块
//普通循环
private static void ExecProcessor(List<ICtrlMessageHandleProcess> processor, CtrlMessageContext context)
{
if (processor == null) return;
foreach (ICtrlMessageHandleProcess logic in processor)