int i=0;
while(i<1000)
{ CoInitialize(NULL);
_ConnectionPtr conPtr=NULL;
conPtr.CreateInstance(__uuidof(Connection));    
    try
     {
         conPtr->ConnectionTimeout = 5;                          //设置连接时间
         conPtr->Open(_bstr_t("DSN=DXS;"), _bstr_t("pacs_dws"),_bstr_t("m123"), adModeUnknown);
     }
     catch(_com_error e)                                              //捕捉异常
     {
 AfxMessageBox(e.Description());
     } 
     CoUninitialize();      
      _RecordsetPtr recordPtr;//数据集指针
      recordPtr.CreateInstance(__uuidof(Recordset));  
      CString cmdStr="select examinationID from t_examination";
     try
     {
              recordPtr->Open(_variant_t(cmdStr), 
              conPtr.GetInterfacePtr(), 
              adOpenDynamic, 
              adLockOptimistic, 
              adCmdText); 
     }
     catch (_com_error  e)
     {
      
     }
      while (!(recordPtr->adoEOF))
      {//获取记录
         _variant_t examinationID;
 examinationID=(int)recordPtr->GetCollect("examinationID");        
 int  iExaminationID=examinationID.intVal;
 recordPtr->MoveNext();
       }
         recordPtr->Close();//关闭记录集
 recordPtr.Release();
 recordPtr=NULL;
         conPtr->Close();//关闭连接
 conPtr.Release();
 conPtr=NULL;
}
 我查看了下内存一个劲的往上涨
  那位大哥知道是什么原因导致的
 我循环一千次是有原因的必须是这样做,应为我必须打到一天一万次一上  那位大哥知道不
  分少没关系我可以在加
  在线等

解决方案 »

  1.   


    CoInitialize(NULL);
    _ConnectionPtr conPtr=NULL;
    conPtr.CreateInstance(__uuidof(Connection));
    等移出循环
      

  2.   

    用这个ADO类试试,测试的运行倒是挺好的。或者建立一个长连接,来做界面的数据库操作。
      

  3.   

      各位大哥
        有没有解决这个内存泄漏的方法呢
      少了分可以追加
        我这边的问题是没办法做一个长连接
           看了 zyq5945大哥的ADO类
      也是做了一个长连接
         我这边那的是别人做的东西,采用是进程式,通过通讯获取通讯信息,同时启动一个程序把通讯的数据保存到数据库中。现在没法动其他的东西呢,只是有内存泄漏的问题
      

  4.   

    CoInitialize(NULL);
    这句放在while(i<1000)前面,就是不要放在循环里,如果要放在循环里,就得在循环最后再加个CoUninitialize函数来释放,就是没有释放造成内存泄露.
    其实CoInitialize(NULL);放在工程初始化函数执行一次就行了,在程序退出函数里加上释放函数
      

  5.   

      CoUninitialize(); 函数我加上去的     
      

  6.   

    CreateInstance和Release都放在循环外。
    CoInitialize在程序初始化调用一次就可以了。
      

  7.   

      问题是这个程序会被连续到用几千次
                 应为这个没有解决实际的问题
           我的问题的根源在于把Ado连接分配的内存完全释放掉才可以
      

  8.   

    如果不行
      那有没有其他方式连接Oracle 数据库呢
      

  9.   

    呵呵,可怜的孩子,你创建的那些对象在一次循环里需要都释放掉,检查一下每个create初始化的地方。
      

  10.   

         每一个create地方都有相应的释放方法
      我就不懂他到底在什么地方什么原因导致他没释放掉