做了个SQL数据库读取和运算的C# WINFORM,可执行完后SQL占用了100M的内存,关闭程序后却不释放内存,在程序中已经有conn.Dispose();了,可还是占用那么多,请高手指点下!谢谢!

解决方案 »

  1.   

    检查所有
    datareader.close()
    sqlconnection.close()
      

  2.   

    conn.Dispose();需要 conn.close() ;   关闭与服务器端(可能是本地数据库)的连接.你的内存占用的应该是连接消耗的.程序关闭了,连接可能没有关闭.
      

  3.   

    sql进程会缓存部分计算结果和编译结果,不必在意。
      

  4.   

    .Net的内存释放时间是不可预测的!
      

  5.   

    sql进程会缓存部分计算结果和编译结果,不必在意。
    ********************************************
    那SQL什么时候会释放内存呢?
      

  6.   

    to  :  那SQL什么时候会释放内存呢?
    服务器的设置也是一个因素。有些服务器设置为一直开者连接,也有的是超时关闭。你的问题是C端的还是 S端的,这个首先要搞清楚,到底内存消耗的是服务器sql消耗 还是因为本地软件消耗?????看你的问题象 服务器端消耗,看你赶兴趣的答题象是客户端的消耗。你自己清楚吗?
      

  7.   

    关闭窗体时用
    ConnectionState.close看看
      

  8.   

    確保你所有的查詢都是軟查詢,也就是參數方式,Sql Server的查詢處理方式你要明白,他有一個SQL池,你在執行一個查詢語句的時候,它先從池中進行查找,如果找到就提取出來執行,如果找不到就添加一條,如果你一直用硬查詢的,就會造成SQL的內存占有率執續增長,直到你重新啟動服務。
      

  9.   

    確保你所有的查詢都是軟查詢,也就是參數方式,Sql Server的查詢處理方式你要明白,他有一個SQL池,你在執行一個查詢語句的時候,它先從池中進行查找,如果找到就提取出來執行,如果找不到就添加一條,如果你一直用硬查詢的,就會造成SQL的內存占有率執續增長,直到你重新啟動服務。
    **************************************
    不懂,麻烦说明下,谢谢!
      

  10.   

    是否如
    declare @i int
    set @i=005
    select time11 from WorkTimeList where workid=@i
      

  11.   

    差不多,在程序裡面是
    select * from table where id=:id
    再用parameters('id').AsString:='123123';這樣的形式
      

  12.   

    强制回收
    请使用
    GC.Collect()
      

  13.   

    建议对connection进行singleton封装
    使用DataReader等占用资源的对象时,建议使用using
      

  14.   

    sqlserver服务器会在内存缓存数据的,不需要释放。如果你不希望内存一直增长的话,就在企业管理器选服务器属性--内存标签页里设置。
      

  15.   

    谢谢,试下!GC.Collect()肯定不行,试过!