在D6+SQL Server 2000环境下,用ADO控件的内存释放有关问题
在D6+SQL Server 2000环境下,用ADO控件的内存释放问题
程序在分析汇总数据期间(频繁的插入删除大量的数据,并对数据进行运算,在无其它任务的情况下需要二十分钟左右),内存一路上升,由起初的几百M上升到1.3G,内存基本上耗完了,程序结束后占有的内存还没释放,在任务管理器中查看还是SqlServer占用,如果要是多个客户用此模块,执行速度就大大降低了!汗呀,
是什么原因啊?请各位赐教!!
另在插入八千余条记录的执行计划过程中发现占有13%的“Table Spool/Eager Spool 将输入中的数据保存到临时表中,以优化重绕操作”,是不是这样的临时表占用的内存一直没释放??数据集在执行后都Close了,怎么样才能及时的释放占用的内存呢??
------解决方案--------------------
把数据业务处理放到服务器上来做,速度快而且不影响用户操作
------解决方案--------------------
SqlServer占内存和控件没什么关系,
1 服务器配置:数据库使用“简单日志”型
Mssql使用内存限量
2 使用数据控件时,使用完毕后可以断开连接,即可
3 写出的SQL语句不要写得太滥,符合优化语句原则
通过以上3步,基本不会出现占用大量内存
------解决方案--------------------
delphi中adoconnection 本省就存在内存泄漏的问题,采用BDE可以解决而且改动不大!
当然采用sql的存储过程不但可以解决,效率有可以提高!
------解决方案--------------------
D6中ADO本身的泄露是无稽之谈,我用D6写得服务器程序可以连续运行几个月保持内存不变,而且即便是ADO本身的问题,也不会影响到SQLServer的内存占用。
这个问题与SQL Server本身的内存管理模式有关,SQL Server不会将已占用的系统内存再释放回去,而是都留作自己的缓存使用,所以SQL Server的占用内存数总是在不断膨胀,直到达到你规定的内存使用上限为止。所以不用担心这个问题,尽可能的把服务器上的剩余内存分配给SQL Server使用就好了。
------解决方案--------------------
如果说有什么书可看的话,SQL Server Books Online和MSDN是最好的教材,前提是你要有点儿耐心:)
程序在分析汇总数据期间(频繁的插入删除大量的数据,并对数据进行运算,在无其它任务的情况下需要二十分钟左右),内存一路上升,由起初的几百M上升到1.3G,内存基本上耗完了,程序结束后占有的内存还没释放,在任务管理器中查看还是SqlServer占用,如果要是多个客户用此模块,执行速度就大大降低了!汗呀,
是什么原因啊?请各位赐教!!
另在插入八千余条记录的执行计划过程中发现占有13%的“Table Spool/Eager Spool 将输入中的数据保存到临时表中,以优化重绕操作”,是不是这样的临时表占用的内存一直没释放??数据集在执行后都Close了,怎么样才能及时的释放占用的内存呢??
------解决方案--------------------
把数据业务处理放到服务器上来做,速度快而且不影响用户操作
------解决方案--------------------
SqlServer占内存和控件没什么关系,
1 服务器配置:数据库使用“简单日志”型
Mssql使用内存限量
2 使用数据控件时,使用完毕后可以断开连接,即可
3 写出的SQL语句不要写得太滥,符合优化语句原则
通过以上3步,基本不会出现占用大量内存
------解决方案--------------------
delphi中adoconnection 本省就存在内存泄漏的问题,采用BDE可以解决而且改动不大!
当然采用sql的存储过程不但可以解决,效率有可以提高!
------解决方案--------------------
D6中ADO本身的泄露是无稽之谈,我用D6写得服务器程序可以连续运行几个月保持内存不变,而且即便是ADO本身的问题,也不会影响到SQLServer的内存占用。
这个问题与SQL Server本身的内存管理模式有关,SQL Server不会将已占用的系统内存再释放回去,而是都留作自己的缓存使用,所以SQL Server的占用内存数总是在不断膨胀,直到达到你规定的内存使用上限为止。所以不用担心这个问题,尽可能的把服务器上的剩余内存分配给SQL Server使用就好了。
------解决方案--------------------
如果说有什么书可看的话,SQL Server Books Online和MSDN是最好的教材,前提是你要有点儿耐心:)