以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  sqlselect如何释放  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=85561)

--  作者:rjh4078
--  发布时间:2016/5/28 14:54:00
--  sqlselect如何释放

有段代码是要循环执行一个sqlselect

 

for

条件1

for

条件2

sqlselect

next

next

一执行 发现内存占用就过了1个G 还在继续上升 我想问下 如何将已判断过的sqlselect行释放掉?


--  作者:Hyphen
--  发布时间:2016/5/28 15:10:00
--  
没有办法释放的,只能事件运行完后由.net的垃圾回收机制自行回收。

尽量一次性返回必要的数据,而不是在循环体中不断连接数据库,对客户端和数据库都不是一种好的体验

--  作者:rjh4078
--  发布时间:2016/5/28 19:54:00
--  

因为是想通过查询数据库是否存在相同记录来决定是否添加当前记录 所以只能加完一次再查一次


--  作者:xiaoohoo
--  发布时间:2016/5/28 20:06:00
--  
为什么不用Compute
--  作者:jspta
--  发布时间:2016/5/28 22:25:00
--  
思路不对,向SQL查询次数越少越好。如果需要比较,那么你就一次加载需要比较的数据到内存,这样使用SELECT速度快了很多。

你这个比较过程肯定可以大幅度优化的,可以好好整理思路。

--  作者:rjh4078
--  发布时间:2016/5/29 19:59:00
--  
以下是引用jspta在2016/5/28 22:25:00的发言:
思路不对,向SQL查询次数越少越好。如果需要比较,那么你就一次加载需要比较的数据到内存,这样使用SELECT速度快了很多。

你这个比较过程肯定可以大幅度优化的,可以好好整理思路。
我考虑过这个问题 使用临时表 我的情况是这样的 比如 我现在查询表中是否有A记录 如果没有就添加 第一次查询的时候 表中是没有A的 然后执行了添加记录 如果再去查询临时表 还是没有A记录的 这样就死循环了 但其实现在数据库中已经添加了A记录了
--  作者:大红袍
--  发布时间:2016/5/29 21:50:00
--  

有必要在循环里面sqlSelect吗?一次性sqlSelect出来不行?做具体例子说明问题。

 

如果要强制回收内存,就直接执行代码 GC.Collect