关于集合性能遍历问题

lk829 2016-06-22 11:04:17
通过linq后取得一组list或ienumerable对象、、、大约200w多数据、、、
现在要插入至postgresql里、、、
在foreach或for遍历的时候。。。性能巨慢。。可能一秒才遍历一次、
不知道该怎么解决。。求赐教、、、
...全文
234 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你这所谓的遍历到底是怎么个遍历法?循环一条条插入数据库?
lk829 2016-06-22
  • 打赏
  • 举报
回复
引用 4 楼 caozhy 的回复:
这种情况不要用linq,直接数据库导出
----------------------------------------------------------------------- 因为要根据多个字段合并后得到的英文文章,要进行单词分割,查找单词出现的个数和频率,并且还得跟单词表进行匹配,而且是针对是每条记录都进行这样统计,一共有2w条左右数据,目前我研究出来的是用linq性能最高,最后取得一个集合,200w多条数据,诡异的是,遍历的时候,只是单纯的遍历,大概一秒才遍历一次,集合的对象也就三个int型的字段。
threenewbee 2016-06-22
  • 打赏
  • 举报
回复
这种情况不要用linq,直接数据库导出
puler 2016-06-22
  • 打赏
  • 举报
回复
遍历的问题,通过分割索引值,进行多线程,或者优化算法的行为进行,应该能有效加速 想到几种可能,不保证能行 1、多线程对总记录数进行分割LinQ搜索 2、优化算法进行范围内搜索,SQL里的搜索技巧也有类似的思路,那个几层楼,两个鸡蛋,快速找到摔不破的楼层的算法估计就能有效的解决问题 3、利用异构计算、PLinQ 这个只是了解过,没有实际使用过
lk829 2016-06-22
  • 打赏
  • 举报
回复
引用 1 楼 sp1234 的回复:
没有用过 postgresql,不知道其特点。 一般来说,对于带有事务关系数据库如果要大量插入数据,你需要注意: 1. 几百条或者几千条记录为一个事务。不要每条插入语句(默认或者显式地)启动一个事务。特别对于一些事务“锁”非常慢的数据库系统,例如SQLite,其Commit操作巨慢无比。 2. 不要在有索引、约束定义的表上大量插入数据。如果一定要批量插入,你应该使用 MDL 语句将所有这些东西都删除掉,然后在插入完毕再重新修改到表定义。 3. 在插入过程中不要做自认为聪明的比较操作。例如有人一遍插入、一遍比较有没有重复(以为有了索引就能1000倍速度加快这种比较)。这在数据量很小时也许没有什么,但是数据量很大时,你可能把原本5分钟能做完的事情变成仂个小时才能做完的事情。因为即使是在比较重能用到索引加速,此比较速度也会因为表中数据量加大而快速增加,并且比单纯地插入记录的速度肯定是要慢十倍到几十倍的。
--------------------------------------------------------- 现在还不谈插入sql语句,还只是单纯的遍历。
  • 打赏
  • 举报
回复
没有用过 postgresql,不知道其特点。 一般来说,对于带有事务关系数据库如果要大量插入数据,你需要注意: 1. 几百条或者几千条记录为一个事务。不要每条插入语句(默认或者显式地)启动一个事务。特别对于一些事务“锁”非常慢的数据库系统,例如SQLite,其Commit操作巨慢无比。 2. 不要在有索引、约束定义的表上大量插入数据。如果一定要批量插入,你应该使用 MDL 语句将所有这些东西都删除掉,然后在插入完毕再重新修改到表定义。 3. 在插入过程中不要做自认为聪明的比较操作。例如有人一遍插入、一遍比较有没有重复(以为有了索引就能1000倍速度加快这种比较)。这在数据量很小时也许没有什么,但是数据量很大时,你可能把原本5分钟能做完的事情变成仂个小时才能做完的事情。因为即使是在比较重能用到索引加速,此比较速度也会因为表中数据量加大而快速增加,并且比单纯地插入记录的速度肯定是要慢十倍到几十倍的。

8,494

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧