当前位置: 代码迷 >> C# >> 如何用多线程处理大量的数据
  详细解决方案

如何用多线程处理大量的数据

热度:91   发布时间:2016-05-05 03:21:19.0
怎么用多线程处理大量的数据
我有一个方法A

public static void A(参数1, 参数2,参数3)
{}  //这个是处理订单的

然后问题来了,要是有1000个订单需要在很短时间内处理完,
如果不用多线程,一个一个处理的话,时间比较长,所以我想用多线程处理。。。。。。。

我该怎么做?谁能写个案例吗?
------解决思路----------------------

int orderCount = 1003;//订单数
int MaxThreadCount = 64;//开启最大线程数
int LoopCount = orderCount  % MaxThreadCount == 0 ? orderCount / MaxThreadCount : orderCount / MaxThreadCount + 1;
for (int i = 0; i < LoopCount; i++)
{
ManualResetEvent[] doneEvents;
                if (i == LoopCount -1)
                    doneEvents = new ManualResetEvent[orderCount - i * MaxThreadCount];
                else
                    doneEvents = new ManualResetEvent[MaxThreadCount];

                for (int j = 0; j < MaxThreadCount; j++)
                {                  

                    doneEvents[j] = new ManualResetEvent(false);
/*
//定义订单处理类
                    SyncThread workThread = new SyncThread (doneEvents[j]);
*/
                    ThreadPool.QueueUserWorkItem(workThread.ThreadPoolCallback,参数1,参数2,参数3);
                }

                // Wait for all threads in pool to calculation...
                WaitHandle.WaitAll(doneEvents);
}

------解决思路----------------------
找到耗时操作,然后可以将耗时操作放在多个线程来完成,避免阻塞,多线程注意同步问题,
创建线程:
http://www.cnblogs.com/gdjlc/archive/2009/12/13/2086934.html
线程同步:
http://www.cnblogs.com/michaelxu/archive/2008/09/20/1293716.html
------解决思路----------------------
你可以把处理方法改为函数,例如
public static bool A(int 参数1, string 参数2, B 参数3)

然后计算结果可以使用PLinq,例如
var result = (from x in 条件集合.AsParallel() select A(x.a, x.b, x.c)).Count();


PLinq非常干净、简洁,而且可以自动给根据CPU能力和系统资源情况而调整并发数量。对于复杂的任务,使用简洁的写法(而不是低级的底层写法),反更能提高系统设计效率。
------解决思路----------------------
引用:
你可以把处理方法改为函数,例如
public static bool A(int 参数1, string 参数2, B 参数3)

然后计算结果可以使用PLinq,例如
var result = (from x in 条件集合.AsParallel() select A(x.a, x.b, x.c)).Count();


PLinq非常干净、简洁,而且可以自动给根据CPU能力和系统资源情况而调整并发数量。对于复杂的任务,使用简洁的写法(而不是低级的底层写法),反更能提高系统设计效率。

涨姿势了
  相关解决方案