多线程分配

zhanglong_longlong 2015-07-22 09:24:28
比如我有个list里面有1000条数据,想批量插入数据库,在循环中控制多线程每100个数据一个线程,1000条也就是10个线程控制,怎么写?有小列子吗?
...全文
123 3 打赏 收藏 举报
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zhanglong_longlong 2015-07-22
  • 打赏
  • 举报
回复
引用 2 楼 dongxinxi 的回复:
其实并不是线程越多效率越好的,你大可以每个线程分批次(就像你说的每次100条)插入,这样可以大幅减少应用程序与数据库之间的连接次数,当连接池里没有空余的连接时,需要开启一个socekt基础连接,这个相对也是比较耗时的 这就像你让N个人去银行排队办事,当号排满了,多余的人也只能等着
好深奥,有什么列子吗?
  • 打赏
  • 举报
回复
其实并不是线程越多效率越好的,你大可以每个线程分批次(就像你说的每次100条)插入,这样可以大幅减少应用程序与数据库之间的连接次数,当连接池里没有空余的连接时,需要开启一个socekt基础连接,这个相对也是比较耗时的 这就像你让N个人去银行排队办事,当号排满了,多余的人也只能等着
  • 打赏
  • 举报
回复
List<string> list = new List<string>();
int splitNum = list.Count / 10 + (list.Count % 10 == 0 ? 0 : 1);//获取每个线程应该处理多少数据
Parallel.For(0, 10, index =>
{
    for (var i = 0 + index * splitNum; i < splitNum * (index + 1); i++)
    {
        if (i >= list.Count) { break; }//判断索引范围是否已超出list的总数量
        Console.WriteLine(list[i]);//这就是获取到的对象
    }
});
Parallel有好几个重构方法,这里举例用的是Action的,如果需要返回数据,那你要考虑下并发问题
相关推荐
发帖
.NET社区

6.1w+

社区成员

.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
帖子事件
创建了帖子
2015-07-22 09:24
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。