在D6+SQL Server 2000环境下,用ADO控件的内存释放问题

xx1204 2007-07-23 04:32:12
程序在分析汇总数据期间(频繁的插入删除大量的数据,并对数据进行运算,在无其它任务的情况下需要二十分钟左右),内存一路上升,由起初的几百M上升到1.3G,内存基本上耗完了,程序结束后占有的内存还没释放,在任务管理器中查看还是SqlServer占用,如果要是多个客户用此模块,执行速度就大大降低了!汗呀,
是什么原因啊?请各位赐教!!

另在插入八千余条记录的执行计划过程中发现占有13%的“Table Spool/Eager Spool 将输入中的数据保存到临时表中,以优化重绕操作”,是不是这样的临时表占用的内存一直没释放??数据集在执行后都Close了,怎么样才能及时的释放占用的内存呢??
...全文
224 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xx1204 2007-07-24
  • 打赏
  • 举报
回复
谢谢,谢谢各位!
不是ADO控件的内存释放的问题,我在提问时就问错了,现在理解了,明白了
是SQL Server的内存管理机制,谢谢rodgerkong(Rodger) !!
分数不多,请见谅!
rodgerkong 2007-07-24
  • 打赏
  • 举报
回复
如果说有什么书可看的话,SQL Server Books Online和MSDN是最好的教材,前提是你要有点儿耐心:)
rodgerkong 2007-07-24
  • 打赏
  • 举报
回复
D6中ADO本身的泄露是无稽之谈,我用D6写得服务器程序可以连续运行几个月保持内存不变,而且即便是ADO本身的问题,也不会影响到SQLServer的内存占用。
这个问题与SQL Server本身的内存管理模式有关,SQL Server不会将已占用的系统内存再释放回去,而是都留作自己的缓存使用,所以SQL Server的占用内存数总是在不断膨胀,直到达到你规定的内存使用上限为止。所以不用担心这个问题,尽可能的把服务器上的剩余内存分配给SQL Server使用就好了。
咖啡色的浪漫 2007-07-24
  • 打赏
  • 举报
回复
delphi中adoconnection 本省就存在内存泄漏的问题,采用BDE可以解决而且改动不大!
当然采用sql的存储过程不但可以解决,效率有可以提高!
xx1204 2007-07-23
  • 打赏
  • 举报
回复
谢谢两位!
hongqi162: 您说的是用存储过程吗?改用存储过程,变动太大,此程序是前辈的程序,运算比较复杂,不想做大的更改,只对数据表和SQL语句做了些优化,如果在此基础上,还有什么优化和改进的办法吗?请赐教!
DavyWind:
1、设了,测试了,是升至限制的内存后不再继续升了,但是SqlServer占用的内存还是没有释放。??
2、断开连接?断开和连接时也是很耗CPU和时间的,您说的具体是什么意思??我是用TAdoQuery连接TAdoConnection的
3、SQL语句不是很滥啊,优化过了的,

有相关的电子书或资料吗?补补基础的东西,基础没打好[汗]
再次表示感谢!!
DavyWind 2007-07-23
  • 打赏
  • 举报
回复
SqlServer占内存和控件没什么关系,
1 服务器配置:数据库使用“简单日志”型
Mssql使用内存限量
2 使用数据控件时,使用完毕后可以断开连接,即可
3 写出的SQL语句不要写得太滥,符合优化语句原则

通过以上3步,基本不会出现占用大量内存
hongqi162 2007-07-23
  • 打赏
  • 举报
回复
把数据业务处理放到服务器上来做,速度快而且不影响用户操作

2,507

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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