最近要处理一个业务,从数据库查了一个数据,无奈的是,数据竟然有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;}elsereturn _list;
}

4、模拟线程数据

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

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

编程中大量数据的优化技巧相关推荐

  1. mysql每一行数据类型_MySQL_MySQL编程中的6个实用技巧,每一行命令都是用分号(;)作为 - phpStudy...

    MySQL编程中的6个实用技巧 每一行命令都是用分号(;)作为结束 对于MySQL,第一件你必须牢记的是它的每一行命令都是用分号(;)作为结束的,但当一行MySQL被插入在PHP代码中时,最好把后面的 ...

  2. 计算机算法对程序设计的作用,计算机编程中数学算法的优化策略

    李钰 摘要:在计算机编程中,合理地运用数学算法所拥有的优势不但可以完好地针对所拥有的问题进行总结分类归纳,还可以将其归纳作为基础从而进行针对性的统一计算,并且能够将非常复杂的问题进行整体的简化并且将其 ...

  3. Python编程中一些异常处理的小技巧

    编程中经常会需要使用到异常处理的情况,在阅读了一些资料后,整理了关于异常处理的一些小技巧记录如下. 1 如何自定义异常 1.1 定义异常类 在实际编程中,有时会发现Python提供的内建异常的不够用, ...

  4. mysql中无穷大如何表示_编程中无穷大常量的设置技巧

    如果问题中各数据的范围明确,那么无穷大的设定不是问题,在不明确的情况下,很多程序员都取0x7fffffff作为无穷大,因为这是32-bit int的最大值.如果这个无穷大只用于一般的比较(比如求最小值 ...

  5. 页面SEO中文章标题的优化技巧

    我们都知道长尾关键词一般都是指竞争比较弱,较为冷门的关键词,放置在网站栏目页.专题页以及文章页面之中.而对于一个大中型网站来说,更多的是以长尾关键词优化为主要的SEO策略.所以这里说的文章标题的优化, ...

  6. c ++类成员函数_C ++编程中的数据成员和成员函数

    c ++类成员函数 C ++中的数据成员和成员函数 (Data members and Member functions in C++) "Data Member" and &qu ...

  7. iOS开发中常见的性能优化技巧

    性能问题的主要原因是什么,原因有相同的,也有不同的,但归根到底,不外乎内存使用.代码效率.合适的策略逻辑.代码质量.安装包体积这一类问题. 但从用户体验的角度去思考,当我们置身处地得把自己当做用户去玩 ...

  8. 游戏开发中字典数据的优化方案 golang版本

    大部分的游戏开发过程中,会出现大量的游戏对象,大量的游戏对象产生大量的对象属性,不可避免地会使用到map也就是hash字典来存储数据. 那么为什么需要用字典存储呢?我开发过程中经常遇到的是这样的需求, ...

  9. php多个表中查找数据_Excel实战技巧74: 在工作表中创建搜索框来查找数据

    学习Excel技术,关注微信公众号: excelperfect 本文主要讲解如何创建一个外观漂亮的搜索框,通过它可以筛选数据并显示搜索结果. 如下图1所示,在数据区域上方放置有一个文本框,用来输入要搜 ...

最新文章

  1. Android开发:Kotlin下配置DataBinding
  2. python q切换指定目录_Python小工具:3秒钟将视频转换为音频
  3. [机器学习] Boosting算法1 --- AdaBoost
  4. Swift中文教程(二十二) 泛型
  5. JAVA正确地自定义比较对象---如何重写equals方法和hashCode方法
  6. qt添加qwt帮助文件_qt creator中使用qwt插件
  7. Javascript动态函数
  8. 机器学习基础(四十九)—— 总结
  9. Udp通信 暑期学习笔记(三)
  10. infopath2007-2013直接连接数据源(Access或Sqlserver)设计表单模板
  11. 9月,重磅推出Linux、数据结构、领域驱动等10本程序员新书
  12. 郑捷《机器学习算法原理与编程实践》学习笔记(第五章 梯度寻优)5.2 Logistic梯度下降法...
  13. 一键加速去不掉加锁的_三种方法让你的Service不被“一键加速”和系统杀掉
  14. adb按键精灵_雷电安卓模拟器修改信息及常用adb命令整理贴
  15. lombok中的builder注解居然是一种设计模式:让我们了解一下超级实用的“建造者模式”吧
  16. led matlab仿真,大功率LED照明电源研究及基于Matlab的仿真
  17. Re: 怪猫追mm (转载)
  18. Linux内核中的软中断、tasklet和工作队列详解
  19. 险资搭台 游资唱戏?南玻A高潮迭起
  20. javascript调用微信或QQ扫一扫

热门文章

  1. spacy的每个句子doc的属性和方法
  2. 云服务器的数据备份和恢复
  3. 主板有电无法启动_win7系统下主板可以通电但不能启动的解决方法
  4. electron 实现截图功能
  5. 项目中2个Token的原因
  6. 蚂蚁借呗反复借还会影响房贷么?
  7. RTL8198D 网口插拔事件捕获功能实现
  8. XScript接入百宝云注册码系统教程
  9. Brightree发布针对居家健康和临终关怀助理的BrightreeCARE App
  10. Linux-脚本安装和卸载JDK