编程中大量数据的优化技巧

最近要处理一个业务,从数据库查了一个数据,无奈的是,数据竟然有10万条,我这边需要对这些数据做处理,如果一条一条执行,速度很明显太慢,我突然想到了分页+多线程的技巧,上代码:

新建一个Demo3类,模拟添加10万条数据

//demo3为模拟类
 class Demo3
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
//模拟10万条数据
List<Demo3> dimo = new List<Demo3>();
            for (int i = 0; i < 100001; i++)
            {
                Demo3 demo3 = new Demo3();
                demo3.Id=i;
                demo3.Name="站三"+i.ToString();
                dimo.Add(demo3);
            }

1、将10万条数据,每1000条数据,做一个分页,得出需要分多少页

//获取demo3有多少页
int count = dimo.Count();//100001
//使用Math.Ceiling(进1法)计算出需要分多少页
decimal can = Math.Ceiling(Convert.ToDecimal(count)/ Convert.ToDecimal(1000));

2、使用Task处理数据

//新建一个Task   
List<Task> taskList = new List<Task>();
for (int i = 1; i <= can; i++)
 {
     //处理List分页函数
    List<Demo3> data = SplitList<Demo3>(dimo, i, 1000);
     //将需要处理的数据,放到List<Task>
    taskList.Add( Task.Factory.StartNew(() => { 
                    Sleep(data);
                 }));
 }
//等待Task处理
 Task.WaitAll(taskList.ToArray());

3、分页数据处理

public static List<T> SplitList<T>(List<T> _list, int PageIndex, int PageSize)
 {
      int _PageIndex = PageIndex == 0 ? 1 : PageIndex;
      int _PageSize = PageSize == 0 ? 20 : PageSize;
      int PageConut = (int)Math.Ceiling(Convert.ToDecimal(_list.Count) / _PageSize);
      if (PageConut >= _PageIndex)
      {
       List<T> list = new List<T>();
       list = _list.Skip((_PageIndex - 1) * _PageSize).Take(_PageSize).ToList();
       return list;
      }
      else
       return _list;
}

4、模拟线程数据

 private static void Sleep(List<Demo3> demo3s)
 {
   foreach (var item in demo3s)
    {
     Thread.Sleep(1000);
     }
 }

这样主要解决的是或者数据处理的部分,用线程并行全部处理了,最终完成时间取决于数据多多的一个Task。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值