日期:2014-05-17  浏览次数:20734 次

VC ADO写入SQL Server 2000 ,内存增加
如下代码,运行 程序,SQL内存不断增加,搞不懂原因!?求帮助
[code=C/C++][/code]
_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();
}

------解决方案--------------------
SQL数据占用内存后不会释放内存的。如果需要,可以知道sql server占用的最大内存来解决。
------解决方案--------------------
缓慢上涨完全没问题的啊。SQLServer内存存的大部分是缓存。用完其实会释放的。只是在内部释放,为了避免频繁向操作系统申请,所以申请一次就自动占用。用于下次从用。当windows感觉自身有内存压力时,会回收SQLServer的内存。强烈建议控制SQLServer最大内存,一般是留1~3G给操作系统。另外留1~2个CPU给操作系统。
------解决方案--------------------
正式的服务器要有计划性的重启的。而且限定了最高内存之后就不用过于担心。如果是开发、测试机,那顶多就重启咯。任何数据库管理系统,必然是吃内存的。