WinFrom模拟多线程数据处理
来源:互联网 发布:淘宝模板制作教程视频 编辑:程序博客网 时间:2024/06/01 12:14
/// <summary> /// 模拟1000条数据,每条耗时1秒钟,开100个线程处理,结果耗时10秒,符合预期 /// </summary> private void DoAction() { //获取待处理数据,如待同步订单,下面的list是测试数据 var list = new List<int>(); for (int i = 0; i < 1000; i++) { list.Add(i); } var ticket = Environment.TickCount; ThreadHelper.Run(list, (a) => { //处理操作,如订单同步 Thread.Sleep(1000);//这句是测试代码,模拟处理操作花费的时间 }, () => { MessageBox.Show("全部完成,耗时:" + (Environment.TickCount - ticket) + "毫秒"); Thread.Sleep(5000);//加了延时,防止数据库没有待同步订单时无限查询数据库 DoAction();//开始下一次同步 },100); }
/// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <param name="items">待处理的数据集合</param> /// <param name="action">处理操作</param> /// <param name="finish">完成后的操作</param> /// <param name="threadCount">线程数量</param> public static void Run<T>(List<T> items, Action<T> action, Action finish, int threadCount = 100) { _finishedCount = 0; var perCount = items.Count < threadCount ? items.Count : items.Count / threadCount; var index = 0; while (true) { var ps = items.Skip(index * perCount).Take(perCount).ToList(); if (!ps.Any()) return; new Thread(() => { foreach (var p in ps) { action(p); lock (_lock) { _finishedCount++; } if (_finishedCount == items.Count) finish?.Invoke(); } }).Start(); index++; } }
阅读全文
0 0
- WinFrom模拟多线程数据处理
- winfrom使用多线程
- winfrom使用多线程
- winfrom 多线程更新UI
- 多线程数据处理
- [小技巧]winfrom使用多线程
- 模拟java 数据处理
- C#winfrom模拟登录系统总结
- 模拟多线程
- C# winfrom利用多线程实现滚动条效果
- 模拟大数据处理、linux下hash_map()使用
- 模拟大数据处理之——bitset
- get和post模拟发送和数据处理
- Linux C多线程编程注意事项及数据处理
- Tensorflow基础:多线程输入数据处理框架
- 【TensorFlow】数据处理(队列和多线程)
- java8新特性:Stream多线程并行数据处理
- 用javascript模拟多线程
- Oracle 建立索引及SQL优化
- linux怎样使用top命令查看系统状态
- 将Android应用log信息保存到手机本地
- AndroidStudio Error:Please Select Android Sdk
- jsp三种注释
- WinFrom模拟多线程数据处理
- BootstrapValidator与My97DatePicker日期校验
- 机器学习总结 选择一个合适的算法
- HDU 1213 How Many Tables
- innobackupex 备份多实例
- Android Studio: 编码UTF-8的不可映射字符
- Server Tomcat v7.0 Server at localhost failed to start.解决方法
- java三大框架概述
- 事务的隔离级别