• 全部
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm&WPF
  • C#开发新技术
  • 问答

c# 一个for循环速度太慢的问题

雪绒花痴 学生  2021-03-03 04:17:34
一个for循环,循环的值都要在sqlserver数据库进行查询验证是否有无。
能成功循环,就是一旦循环的值多了速度就会很慢,有什么不改变验证数据库的前提下,进行加快速度
...全文
1961 点赞 收藏 21
写回复
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
冰思雨 03-09
优化步骤: 1. 建立数据库连接池,不要每次操作都建立和关闭数据库连接。 每个连接,数据库端都会有操作的缓存以及数据的缓存,可以优化你的SQL执行效率。 新的连接里面没有上几次执行的语句和数据,无法让数据库进一步的进行优化。 2. 循环体中每次查询都只能查出一条数据,可以重新设计查询语句,一次性将循环体中所有要查询的数据查出来。 一个循环体要执行100次的循环,每次循环都查询出一条记录。 可以改为,循环之前,一次性查出一百个记录,然后,循环体中逐个处理查询结果。 这样做,在逻辑上是等价的,但是,效率上会更高,省去了99次的交互和查询过程。 3. 如果不能一次性查出所有循环体中需要的记录(实际上是可以一次性全查询出来的),还有一种优化的方向, 看看目标表中 b_deal=0 的记录条数有多少,如果少于几百上千条的话,可以一次性读取到内存当中,将这些数据进行缓存, 然后,循环体内就不用再查了,直接从内存中访问。 当然了,这种方案在这里是并不推荐的,因为步骤2是可以实现的。两者异曲同工。
回复
寻址方法不好。。
回复
小沐CA 03-08
其一,速度都耽误在闭合上面了,可以用批量处理的方式来处理循环。其二就是换掉if循环
回复
小沐CA 03-08
其一,速度都耽误在闭合上面了,可以用批量处理的方式来处理循环。其二就是换掉if循环
回复
可以把语句拼接起来,用in来代替
回复
努力vis提升自己vulnerable
回复
心蓝168 03-06
由于已知从哪个表查询,还有查询条件i的值已定,可以直接先把查询出来,然后再循环处理number的值。 即:select boxindex/100 from dbo.Meter_** where b_deal=0 and boxindex in (.......),这样就可以只操作一次数据,然后再循环求number的值
回复
如何增加积分啊?
回复
duangufei 03-05
直接用in查询,boxindex in('XXXX'),外面循环拼接XXX,一条sql语句就都出来了
回复
一般情况下,数据量特别大的需要另外处理。一次查出所有数据,然后根据条件在查出的数据中进行筛选和处理
回复
sql里的merge into
回复
先说说,你要实现的是什么
回复
建议使用如下算法:
1、将循环体的值先保存到 DataTable 中
2、开启数据库事务
3、在数据库中建立临时表
4、使用 SqlBulkCopy 组件将 DataTable 的数据一次性导入到数据库的临时表
5、使用 SQL 语句处理临时表的数据
6、将处理的结果使用 SQL 查询出来
7、提交事务

所有需要多次与数据库交互的场景均可以使用上述机制处理,比循环交互快得多。
回复
你先把数据查出来,在外面判断,或者写个存储过程,在过程里面判断,你这循环一次连一次~不慢也得慢了
回复
xugq979 03-03
1、循环前 把需要的数据查出来(数据量级不是很大的前提)。 2、循环内 用查出来的数据集进行 有效性验证。 这样 数据库只查询一次。
回复
much0726 03-03
数据库的开关是比较耗时间的,可以考虑多语句,或者存储过程,一次性提交
回复
直接搞个存储过程,你传递下minnum跟maxnum参数,让存储过程去验证返回结果,还有你的sdr根本没用。。。每一遍都执行了两次select语句。
回复
古耕 03-03
一些没必要的计算和判断用代码来做,减少查询数据库的次数,速度自然上来了
回复
古耕 03-03
用批处理语句,不要每次循环就查一个,查100次和查1次效率肯定不一样
回复
不要频繁打开关闭数据库连接
回复
加载更多回复
相关推荐
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2021-03-03 04:17
社区公告

让您成为最强悍的C#开发者