我采用VC+Ado +sql server 每查询一次都会有4K的内存增加,如何解决?我采用的是Open()方法执行sql语句,然后查询完之后使用Close()关闭,但是还是有4K的内存在不断增加,郁闷。

解决方案 »

  1.   

    如果涨到一定程度不再变化,那可能是库缓存等问题。如果一直在增长可以调试运行。用F5启动,内存增长几次后关闭程序,看vc调试输出窗口,如果有内存泄露是会有提示相应泄露源文件以及代码为之的
      

  2.   

    借个地方:
    (为什么提问点了没有反应呢?)
    CRecordset not found in m_pDatabase->m_listRecordsets这个警告如何解决啊?解决了开帖给分
      

  3.   

    any one can solve the problem?i have searched so many articles, but no answer i have got till now.depression.
      

  4.   

    pity, isn't it?
    why no one can solve this problem?
      

  5.   

    如果你用的是Connection.Close,那么有一点需要注意.在对打开的 Connection 的操作结束后,可使用 Close 方法释放所有关联的系统资源。关闭对象并非将它从内存中删除;可以更改它的属性设置并在以后再次使用 Open 方法打开它。要将对象完全从内存中删除,可将对象变量设置为 Nothing。如果你用的是Recordset的Close方法,那我就搞不懂了,如果是后一种情况,那么写日志看操作是否都成功吧.
      

  6.   

    试试改写成这样看看:_RecordsetPtr m_pRecordset;///////////////////////////m_pRecordset.Close();
    m_pRecordSet = NULL;~~~~~~~~~~~~~~~~~~~~~~~~~
      

  7.   

    _ConnectionPtr m_pConnection;
    _RecordsetPtr m_pRecordset ;在确认所有数据库操作都结束后,先释放RecordsetPtr的资源,再释放connectionPtr 占用的资源:m_pRecordset.Close();
    m_pRecordset = NULL;m_pConnection.Close();
    m_pConnection = NULL;
      

  8.   

    ameng()  说的是对的. 是SQL SERVER 的缓存问题.自己开任务管理器上可以看到内存都是被sqlserver.exe加上的.如果你的SQL内存给的是动态的,并且足够大那么 .......++++++++++.
    建议用高速缓存可以及时释放内存.
    借个地方问个问题:
    我给SQL SERVER 动态分的内存最大是25M ,可是.他居然用了我37M 才停止增长.WHY  ???
      

  9.   

    ok, i will try to find the answer, thanks.
      

  10.   

    我在这里补充一句,我的Recordset设置的是一个全局变量,我想在使用它执行Select方法取出我所要的数据之后能清空检索出的内容所占用的内存
      

  11.   

    查个20000条数据试试,看看大数据量情况下是不是内存猛涨,如果是,那么可能是你的程序有内存泄漏,即便是不连数据库因该问题也存在。我想应该不是SQL SERVER的问题吧。还有,给你推荐个工具,Purify,IBM公司的专业内存泄漏检测工具,很方便的,不信试试。呵呵。