分析完1万条数据之后内存会增加200m。该释放的都释放掉了,请大家帮忙看看。
 #import <msxml4.dll> //raw_interfaces_only
 using namespace MSXML2;
hr = pXmlDoc.CreateInstance(__uuidof(MSXML2::DOMDocument));
  if (FAILED(hr))
  {
  AfxMessageBox("Faild to Create XMLDom Instance !");
  pXmlDoc=NULL;
  }
  else
  {
 
  _bstr_t xmlstr=(LPCSTR)strResult;
  VARIANT_BOOL bresult;
  bresult = pXmlDoc->loadXML(xmlstr);
  if (!bresult)
  {
pXmlDoc->Release();
  pXmlDoc=NULL;
  }
  else 
  {
  long count = -1;
  pXmlDoc->get_childNodes(&pXmlList);
  if (pXmlList == NULL)
  {
  throw;
  }
  pXmlList->get_length(&count);
  for(int i = 0; i < count ;i++)
  {
  pXmlList->raw_nextNode(&pXmlNode);
  if(!pXmlNode)
  break;
 
  pXmlNode->raw_selectSingleNode(bProperty,&pXDNTemp);
  if (pXDNTemp!= NULL)
  {
  pXDNTemp->get_text(&bStrText);
  pXDNTemp->Release();
  pXDNTemp = NULL;
  }
  if (bStrText != NULL)
  {
  strProperty= CString(bStrText);
  SysFreeString(bStrText);
  bStrText = NULL;
  }
  pXmlNode->raw_selectSingleNode(bSerialID,&pXDNTemp);
  if (pXDNTemp!= NULL)
  {
  pXDNTemp->get_text(&bStrText);
  pXDNTemp->Release();
  pXDNTemp = NULL;
  }
  if (bStrText != NULL)
  {
  strSerialID= CString(bStrText);
  SysFreeString(bStrText);
  bStrText = NULL;
  if (pView == NULL)
  {
  break;
  }
  }
  pXmlNode->raw_selectSingleNode(bEquipeName,&pXDNTemp);
  if (pXDNTemp!= NULL)
  {
  pXDNTemp->get_text(&bStrText);
  pXDNTemp->Release();
  pXDNTemp = NULL;
  }
  if (bStrText != NULL)
  {
  strEquipeName = CString(bStrText);
  SysFreeString(bStrText);
  bStrText = NULL;
  }
  pXmlNode->raw_selectSingleNode(bMsgData,&pXDNTMsgData);
  if (pXDNTMsgData!= NULL)
  {
  pXDNTMsgData->raw_selectSingleNode(bCheckState,&pXDNTemp);
  if (pXDNTemp!= NULL)
  {
  pXDNTemp->get_text(&bStrText);
  pXDNTemp->Release();
  pXDNTemp = NULL;
  }
  if (bStrText != NULL)
  {
  strCheckState= CString(bStrText);
  SysFreeString(bStrText);
  bStrText = NULL;
  }
  pXDNTMsgData->raw_selectSingleNode(bResultInfo,&pXDNTemp);
  if (pXDNTemp!= NULL)
  {
  pXDNTemp->get_attributes(&pXmlNamedNodeMap);
  if (pXmlNamedNodeMap!= NULL)
  {
  pXmlNamedNodeMap->getNamedItem("result_type")->get_text(&bStrText);
  if (bStrText != NULL)
  {
  strIResultType= CString(bStrText);
  SysFreeString(bStrText);
  bStrText = NULL;
  }
  pXmlNamedNodeMap->Release();
  pXmlNamedNodeMap = NULL;
  }
  pXDNTemp->get_text(&bStrText);
  pXDNTemp->Release();
  pXDNTemp = NULL;
  }
  if (bStrText != NULL)
  {
  strResultInfo= CString(bStrText);
  SysFreeString(bStrText);
  bStrText = NULL;
  }
  pXDNTMsgData->raw_selectSingleNode(bCheckedCount,&pXDNTemp);
  if (pXDNTemp!= NULL)
  {
  pXDNTemp->get_text(&bStrText);
  pXDNTemp->Release();
  pXDNTemp = NULL;
  }
  if (bStrText!= NULL)
  {
  strCheckedCount = CString(bStrText);
  SysFreeString(bStrText);
  bStrText = NULL;
  }
  pXDNTMsgData->Release();
  pXDNTMsgData = NULL;
  }
  }

解决方案 »

  1.   

    #import <msxml4.dll> //raw_interfaces_only 
    using namespace MSXML2; 
    hr = pXmlDoc.CreateInstance(__uuidof(MSXML2::DOMDocument)); 
    if (FAILED(hr)) 

    AfxMessageBox("Faild to Create XMLDom Instance !"); 
    pXmlDoc=NULL; 

    else 
    { _bstr_t xmlstr=(LPCSTR)strResult; 
    VARIANT_BOOL bresult; 
    bresult = pXmlDoc->loadXML(xmlstr); 
    if (!bresult) 

    pXmlDoc->Release(); 
    pXmlDoc=NULL; 

    else 

    long count = -1; 
    pXmlDoc->get_childNodes(&pXmlList); 
    if (pXmlList == NULL) 

    throw; 

    pXmlList->get_length(&count); 
    for(int i = 0; i < count ;i++) 

    pXmlList->raw_nextNode(&pXmlNode); 
    if(!pXmlNode) 
    break; pXmlNode->raw_selectSingleNode(bProperty,&pXDNTemp); 
    if (pXDNTemp!= NULL) 

    pXDNTemp->get_text(&bStrText); 
    pXDNTemp->Release(); 
    pXDNTemp = NULL; 

    if (bStrText != NULL) 

    strProperty= CString(bStrText); 
    SysFreeString(bStrText); 
    bStrText = NULL; 

    pXmlNode->raw_selectSingleNode(bSerialID,&pXDNTemp); 
    if (pXDNTemp!= NULL) 

    pXDNTemp->get_text(&bStrText); 
    pXDNTemp->Release(); 
    pXDNTemp = NULL; 

    if (bStrText != NULL) 

    strSerialID= CString(bStrText); 
    SysFreeString(bStrText); 
    bStrText = NULL; 
    if (pView == NULL) 

    break; 


    pXmlNode->raw_selectSingleNode(bEquipeName,&pXDNTemp); 
    if (pXDNTemp!= NULL) 

    pXDNTemp->get_text(&bStrText); 
    pXDNTemp->Release(); 
    pXDNTemp = NULL; 

    if (bStrText != NULL) 

    strEquipeName = CString(bStrText); 
    SysFreeString(bStrText); 
    bStrText = NULL; 

    pXmlNode->raw_selectSingleNode(bMsgData,&pXDNTMsgData); 
    if (pXDNTMsgData!= NULL) 

    pXDNTMsgData->raw_selectSingleNode(bCheckState,&pXDNTemp); 
    if (pXDNTemp!= NULL) 

    pXDNTemp->get_text(&bStrText); 
    pXDNTemp->Release(); 
    pXDNTemp = NULL; 

    if (bStrText != NULL) 

    strCheckState= CString(bStrText); 
    SysFreeString(bStrText); 
    bStrText = NULL; 

    pXDNTMsgData->raw_selectSingleNode(bResultInfo,&pXDNTemp); 
    if (pXDNTemp!= NULL) 

    pXDNTemp->get_attributes(&pXmlNamedNodeMap); 
    if (pXmlNamedNodeMap!= NULL) 

    pXmlNamedNodeMap->getNamedItem("result_type")->get_text(&bStrText); 
    if (bStrText != NULL) 

    strIResultType= CString(bStrText); 
    SysFreeString(bStrText); 
    bStrText = NULL; 

    pXmlNamedNodeMap->Release(); 
    pXmlNamedNodeMap = NULL; 

    pXDNTemp->get_text(&bStrText); 
    pXDNTemp->Release(); 
    pXDNTemp = NULL; 

    if (bStrText != NULL) 

    strResultInfo= CString(bStrText); 
    SysFreeString(bStrText); 
    bStrText = NULL; 

    pXDNTMsgData->raw_selectSingleNode(bCheckedCount,&pXDNTemp); 
    if (pXDNTemp!= NULL) 

    pXDNTemp->get_text(&bStrText); 
    pXDNTemp->Release(); 
    pXDNTemp = NULL; 

    if (bStrText!= NULL) 

    strCheckedCount = CString(bStrText); 
    SysFreeString(bStrText); 
    bStrText = NULL; 

    pXDNTMsgData->Release(); 
    pXDNTMsgData = NULL; 

    }