我是靠谱客的博主 可靠樱桃,最近开发中收集的这篇文章主要介绍多线程代码实现二,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我们在执行多线程的情况下,先根据信息的特性或主键 获取信息的唯一性字段,然后分组,

例如我们用会员信息为例:我们需要把4000万的会员信息进行标签处理,给会员打上不同特性的标签,

我们需要用多线程去处理,

        首先我们需要获取会员数量,然后对会员表中的主键 进去分组,下面是每一组200个会员

然后一次执行5组,也就是1000会员。

thread:一次执行的线程数量

decima :里面的除数200 跟下面分配数组的      copyList.Add((200 + 200* i).ToString());里面的200必须一致。

注意:这里的主键需要时id自增的类型,否则在后面就无法查询,不是自增的也必须可以排序的。

 

 

 

1:获取所以数据数量:并且除200,代表每一个线程执行200条数据,

统计组数,数量:count

        decimal decima = Convert.ToDecimal(memberlaber) / 200;
         int count = (int)Math.Ceiling(decima);

2:分配任务数组

真正的组数是 listobj  

 其他的只临时变量

 var listObj = new List<List<string>>();
           var copyList = new List<string>();
           List<string> subItemList;
           for (int i = Labercount; i < count; i++)
           {
               copyList.Add((i).ToString());
               copyList.Add((200 + 200* i).ToString());

               subItemList = new List<string>();
               subItemList.AddRange(copyList);

               listObj.Add(subItemList);
               copyList.Clear();
           }

3:分组完成 ,需要执行线程

下面的代码需要注意一下,thread是开的线程数量

      var watch = Stopwatch.StartNew();
           var option = new ParallelOptions { MaxDegreeOfParallelism = thread};

 

具体方法如下

listObj:上面分配的组

thread:线程数量

 

 

 var watch = Stopwatch.StartNew();
           var option = new ParallelOptions { MaxDegreeOfParallelism = thread};
           System.Threading.Tasks.Parallel.ForEach(listObj.AsParallel(), option, (parameter) =>
           {
               try
               {
                   Console.WriteLine("时间: " + DateTime.Now + " 会员信息ID号为:" + Convert.ToInt32(parameter[0]) * 200 + " 段号数据");

                   //构造传递的参数
                   Hashtable hs = new Hashtable();
                   hs.Add("pageIndex", parameter[0]);
                   hs.Add("pageSize", 200);

                   DataTable dt = member.QueryMember(hs);

                   if (dt != null && dt.Rows.Count > 0)
                   {
                       --- insert 到分类表
                       //IList<Hashtable> addhs = GetMemberCategory(dt);
                       //int result = cate.AddMemberCategory(addhs);
                       DataTable dtdetail = GetMemberCategorydt(dt);
                       int result = cate.BulkCopyDataToDB(dtdetail);
                   }
               }
               catch (Exception ex) 
               {
                   //Logger.WriteAppError(ex, parameter[0] + "号段报错");
                   Console.WriteLine(ex+parameter[0] + "号段报错"+ ex.Message);
               }
           });

           watch.Stop();
           Console.WriteLine("更新记录完成,用时{0}rn", watch.Elapsed.TotalMinutes);
 


 

最后

以上就是可靠樱桃为你收集整理的多线程代码实现二的全部内容,希望文章能够帮你解决多线程代码实现二所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部