使用CRecordSet向数据库添加数据时,随着添加次数的增加,程序内存会不断增长,持续上升而不会下降,不知道是何原因?
CMyRecordset : public CRecordset
{
................................
................................public:
      CString m_name;
      CLongBinary m_lb;
};CMyRecordset reset;
以下是数据库添加操作的部分代码:try{
    //!打开记录集
    reset.Open();    //!确认记录集是可追加的
    if (!reset.CanAppend())
        return;    reset.AddNew();    //!设置m_name字段的值
    reset.m_name = _T("nihao");    //!设置m_lb字段的值
    int nByteSize = 1000; //!<这里随便设的一个字节大小
    reset.m_lb.m_dwDataLength = nByteSize ;
    reset.m_lb.m_hData = ::GlobalAlloc(GMEM_MOVEABLE, nByteSize);
    LPVOID pVoid = ::GlobalLock(reset.m_lb.m_hData);
    ::memset(pVoid, 1, nByteSize);
    ::GlobalUnlock(reset.m_lb.m_hData);
    SetFieldNull(&reset.m_lb, FALSE);
    SetFieldDirty(&reset.m_lb, TRUE);    reset.Update();    //!关闭记录集
    reset.Close();
}
catch (CException *e)
{
................................

解决方案 »

  1.   

     reset.m_lb.m_hData = ::GlobalAlloc(GMEM_MOVEABLE, nByteSize); 申请的内存没有释放
      

  2.   

    其实用了::GlobalFree(reset.m_lb.m_hData);
    忘了在帖子上写了虽然用了::GlobalFree(reset.m_lb.m_hData);
    程序占用的内存也会不断的增长谢谢了
      

  3.   

    用boundschecker检测一下看哪里有泄漏的地方?? 
      

  4.   

    问题好像解决了,每次对数据库中添加数据,每次都是实例一个CRecordSet的对象然后open,在addnew(),结果导致了内存不断增加
    最后我定义了一个全局的实例,每次加入数据的话,就调用addnew(),update()就内存使用就不一直猛涨了我想可能是每次实例CRecordSet对象然后open(),并调用addnew(),update(),可能在栈里开辟了一些内存空间,这些内存空间可能只有在程序结束的时候才能被释放。结果每实例一次添加数据,都会增加内存的使用。谢谢大家了.