SQL不释放内存的问题!请高手指点! 做了个SQL数据库读取和运算的C# WINFORM,可执行完后SQL占用了100M的内存,关闭程序后却不释放内存,在程序中已经有conn.Dispose();了,可还是占用那么多,请高手指点下!谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 检查所有datareader.close()sqlconnection.close() conn.Dispose();需要 conn.close() ; 关闭与服务器端(可能是本地数据库)的连接.你的内存占用的应该是连接消耗的.程序关闭了,连接可能没有关闭. sql进程会缓存部分计算结果和编译结果,不必在意。 .Net的内存释放时间是不可预测的! sql进程会缓存部分计算结果和编译结果,不必在意。********************************************那SQL什么时候会释放内存呢? to : 那SQL什么时候会释放内存呢?服务器的设置也是一个因素。有些服务器设置为一直开者连接,也有的是超时关闭。你的问题是C端的还是 S端的,这个首先要搞清楚,到底内存消耗的是服务器sql消耗 还是因为本地软件消耗?????看你的问题象 服务器端消耗,看你赶兴趣的答题象是客户端的消耗。你自己清楚吗? 关闭窗体时用ConnectionState.close看看 確保你所有的查詢都是軟查詢,也就是參數方式,Sql Server的查詢處理方式你要明白,他有一個SQL池,你在執行一個查詢語句的時候,它先從池中進行查找,如果找到就提取出來執行,如果找不到就添加一條,如果你一直用硬查詢的,就會造成SQL的內存占有率執續增長,直到你重新啟動服務。 確保你所有的查詢都是軟查詢,也就是參數方式,Sql Server的查詢處理方式你要明白,他有一個SQL池,你在執行一個查詢語句的時候,它先從池中進行查找,如果找到就提取出來執行,如果找不到就添加一條,如果你一直用硬查詢的,就會造成SQL的內存占有率執續增長,直到你重新啟動服務。**************************************不懂,麻烦说明下,谢谢! 是否如declare @i intset @i=005select time11 from WorkTimeList where workid=@i 差不多,在程序裡面是select * from table where id=:id再用parameters('id').AsString:='123123';這樣的形式 强制回收请使用GC.Collect() 建议对connection进行singleton封装使用DataReader等占用资源的对象时,建议使用using sqlserver服务器会在内存缓存数据的,不需要释放。如果你不希望内存一直增长的话,就在企业管理器选服务器属性--内存标签页里设置。 谢谢,试下!GC.Collect()肯定不行,试过! 来的都有分..希望大家能简单指导下关于c# socket方面的东西,谢谢了. 这个类是做什么用的?我不太明白里面的意思? 有人做过51地图校正吗? handles 关于命名空间 请问下数据流到底是什么?数据在网络的各个层中究竟是以何种形式存在的? 求一些函数? 播放音乐 我相信你是最棒的_____you are great 通用控件如何引WinForm上的资源? 数据替换的问题,涉及到算法,大家来帮忙 《Effective C#》第一部分已经整理出来,分享给大家
datareader.close()
sqlconnection.close()
********************************************
那SQL什么时候会释放内存呢?
服务器的设置也是一个因素。有些服务器设置为一直开者连接,也有的是超时关闭。你的问题是C端的还是 S端的,这个首先要搞清楚,到底内存消耗的是服务器sql消耗 还是因为本地软件消耗?????看你的问题象 服务器端消耗,看你赶兴趣的答题象是客户端的消耗。你自己清楚吗?
ConnectionState.close看看
**************************************
不懂,麻烦说明下,谢谢!
declare @i int
set @i=005
select time11 from WorkTimeList where workid=@i
select * from table where id=:id
再用parameters('id').AsString:='123123';這樣的形式
请使用
GC.Collect()
使用DataReader等占用资源的对象时,建议使用using