如下代码,运行 程序,SQL内存不断增加,搞不懂原因!?求帮助_RecordsetPtr pRs; 
char buf[255]; sprintf(buf,"SELECT * FROM CHNCV");
pRs.CreateInstance(__uuidof(Recordset));

HRESULT hr=pRs->Open(buf,theApp.m_pConnect.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
if(SUCCEEDED(hr))
{
pRs->AddNew();
CString chpos;
for(int i = 0; i < (MAX_CHANNEL_NUM + 2); i++)
{
for(int j = 0; j < 15; j++)
{

chpos.Format("CH%d_CV%d", i+1,j+1); pRs->PutCollect((_variant_t)chpos,*(m_lpbReceiveBuf + pos + i*15 + j)); 

}
}
pRs->Update();
 
}

if (pRs->State==adStateOpen)
{
pRs->Close();
pRs.Release();
}
if (theApp.m_pConnect->State==adStateOpen)
{
theApp.m_pConnect->Close();
theApp.m_pConnect.Release();
 }

解决方案 »

  1.   

    在线接受数据,1s接受一次,1次大概200K左右,
    我确定释放了内存,代码中以体现出来。
    内存大概在30几M 的时候缓慢向上增长。
      

  2.   

    SQL数据占用内存后不会释放内存的。如果需要,可以知道sql server占用的最大内存来解决。
      

  3.   


    vc ADO方式 访问数据库,使用addnew  putcollect  update 函数应该没有错误吧?
    会不会访问数据库的方式 ado不适合呢
      

  4.   

    缓慢上涨完全没问题的啊。SQLServer内存存的大部分是缓存。用完其实会释放的。只是在内部释放,为了避免频繁向操作系统申请,所以申请一次就自动占用。用于下次从用。当windows感觉自身有内存压力时,会回收SQLServer的内存。强烈建议控制SQLServer最大内存,一般是留1~3G给操作系统。另外留1~2个CPU给操作系统。