我用ADO操作Access数据库程序内存会缓慢增大,写的数据很多,运行5天增大了30M,不知道什么原因。

解决方案 »

  1.   

    是不是因为你的程序本来就需要写很多数据??如果是的话应该也没什么问题,大到一定程度,WINDOWS会自己去处理页面文件的。
    不过要是你Open了而没有Close这类的问题,那就比较麻烦了。看看程序里有什么东西创建了而没有释放吧。
      

  2.   

    try
    {
       rs3->Open("Select TOP 1 * from OutParam",_variant_t((IDispatch*)theApp.m_pConn,true),adOpenDynamic, adLockOptimistic,adCmdText);
    }
    catch(_com_error e)
    {
    CString DataStr;
    DataStr.Format("%s+19",e.Description());
    AfxMessageBox(DataStr);
    }
    OutUnitInfo *p;
    p=m_SystemInfo.OutUnitList->next;
    while (p)
    {
    int OutNo=p->No;
     try{
    if(!rs3->Supports(adAddNew))
    {
    rs3->Close();
     return;
    }
    VARIANT var;
    var.vt = VT_I2;

    rs3->AddNew(); 
    var.iVal = OutNo;
    rs3->Fields->GetItem(_variant_t("OutNo"))->Value=var;
    var.iVal =p->Param.DCompOutPer;
    rs3->Fields->GetItem(_variant_t("PWM"))->Value=var; rs3->Fields->GetItem(_variant_t("DIG"))->Value=_variant_t(p->Status.CompOn1);
    rs3->Fields->GetItem(_variant_t("FIX1"))->Value=_variant_t(p->Status.CompOn2);
    rs3->Fields->GetItem(_variant_t("FIX2"))->Value=_variant_t(p->Status.CompOn3);
    rs3->Fields->GetItem(_variant_t("FIX3"))->Value=_variant_t(p->Status.CompOn4);
    rs3->Fields->GetItem(_variant_t("WV1"))->Value=_variant_t(p->Status.WVOn1);
      rs3->Fields->GetItem(_variant_t("WV2"))->Value=_variant_t(p->Status.WVOn2);
    rs3->Fields->GetItem(_variant_t("WV3"))->Value=_variant_t(p->Status.WVOn3);
    rs3->Fields->GetItem(_variant_t("WV4"))->Value=_variant_t(p->Status.WVOn4);
    rs3->Fields->GetItem(_variant_t("SV1"))->Value=_variant_t(p->Status.SVOn0);
    rs3->Fields->GetItem(_variant_t("SV2"))->Value=_variant_t(p->Status.SVOn1);
    var.iVal=p->Param.EXV1;
    rs3->Fields->GetItem(_variant_t("EXV1"))->Value=var;
    var.iVal=p->Param.EXV2;
    rs3->Fields->GetItem(_variant_t("EXV2"))->Value=var;
    var.iVal=p->Param.EXV3;
    rs3->Fields->GetItem(_variant_t("EXV3"))->Value=var;
    var.iVal=p->Param.EXV4;
    rs3->Fields->GetItem(_variant_t("EXV4"))->Value=var;
    var.iVal=p->Status.FanSpeed1;
    rs3->Fields->GetItem(_variant_t("FAN1"))->Value=var;
    var.iVal=p->Status.FanSpeed2;
    rs3->Fields->GetItem(_variant_t("FAN2"))->Value=var;
    var.iVal=p->Status.FanSpeed3;
    rs3->Fields->GetItem(_variant_t("FAN3"))->Value=var;
    rs3->Fields->GetItem(_variant_t("HP"))->Value=_variant_t(p->Param.HPressure);
    rs3->Fields->GetItem(_variant_t("LP"))->Value=_variant_t(p->Param.LPressure);
    rs3->Fields->GetItem(_variant_t("TH1"))->Value=_variant_t(p->Param.TAirOut);
    rs3->Fields->GetItem(_variant_t("TH2"))->Value=_variant_t(p->Param.TIn1);
    rs3->Fields->GetItem(_variant_t("TH3"))->Value=_variant_t(p->Param.TMid1);
    rs3->Fields->GetItem(_variant_t("TH4"))->Value=_variant_t(p->Param.TIn2);
    rs3->Fields->GetItem(_variant_t("TH5"))->Value=_variant_t(p->Param.TMid2);
    rs3->Fields->GetItem(_variant_t("TH6"))->Value=_variant_t(p->Param.TIn3);
    rs3->Fields->GetItem(_variant_t("TH7"))->Value=_variant_t(p->Param.TMid3);
    rs3->Fields->GetItem(_variant_t("TH8"))->Value=_variant_t(p->Param.TEnviroment);
    rs3->Fields->GetItem(_variant_t("TH9"))->Value=_variant_t(p->Param.TOut1);
    rs3->Fields->GetItem(_variant_t("TH10"))->Value=_variant_t(p->Param.TOut2);
    rs3->Fields->GetItem(_variant_t("TH11"))->Value=_variant_t(p->Param.TOut3);
    rs3->Fields->GetItem(_variant_t("TH12"))->Value=_variant_t(p->Param.TAirRecle);
    rs3->Update(); 

    }//try
    catch (_com_error e)
    {

    AfxMessageBox(e.Description());
    }

    p=p->next;

    }
    rs3->Close();
    以上是插入数据的一部分,每次打开的时候应该都关闭了。
      

  3.   

    try
    {

    rs3->Open("Select TOP 1 * from OutParam",_variant_t((IDispatch*)theApp.m_pConn,true),adOpenDynamic, adLockOptimistic,adCmdText);
    }
    catch(_com_error e)
    {
    AfxMessageBox(e.Description());
    }
    OutUnitInfo *p;
    p=m_SystemInfo.OutUnitList->next;
    while (p)
    {
    int OutNo=p->No;
    try{
    if(!rs3->Supports(adAddNew))
    {
    rs3->close()
     return;
    }
    VARIANT var;
    var.vt = VT_I2;

    rs3->AddNew(); 
    var.iVal = OutNo;
    rs3->Fields->GetItem(_variant_t("OutNo"))->Value=var;
    var.iVal =p->Param.DCompOutPer;
    rs3->Fields->GetItem(_variant_t("PWM"))->Value=var;
    rs3->Fields->GetItem(_variant_t("DIG"))->Value=_variant_t(p->Status.CompOn1);
    rs3->Fields->GetItem(_variant_t("FIX1"))->Value=_variant_t(p->Status.CompOn2);
    rs3->Fields->GetItem(_variant_t("FIX2"))->Value=_variant_t(p->Status.CompOn3);
    rs3->Fields->GetItem(_variant_t("FIX3"))->Value=_variant_t(p->Status.CompOn4);
    rs3->Fields->GetItem(_variant_t("WV1"))->Value=_variant_t(p->Status.WVOn1);
    rs3->Fields->GetItem(_variant_t("WV2"))->Value=_variant_t(p->Status.WVOn2);
    rs3->Fields->GetItem(_variant_t("WV3"))->Value=_variant_t(p->Status.WVOn3);
    rs3->Fields->GetItem(_variant_t("WV4"))->Value=_variant_t(p->Status.WVOn4);
    rs3->Fields->GetItem(_variant_t("SV1"))->Value=_variant_t(p->Status.SVOn0);
    rs3->Fields->GetItem(_variant_t("SV2"))->Value=_variant_t(p->Status.SVOn1);
    var.iVal=p->Param.EXV1;
    rs3->Fields->GetItem(_variant_t("EXV1"))->Value=var;
    var.iVal=p->Param.EXV2;
    rs3->Fields->GetItem(_variant_t("EXV2"))->Value=var;
    var.iVal=p->Param.EXV3;
    rs3->Fields->GetItem(_variant_t("EXV3"))->Value=var;
    var.iVal=p->Param.EXV4;
    rs3->Fields->GetItem(_variant_t("EXV4"))->Value=var;
    var.iVal=p->Status.FanSpeed1;
    rs3->Fields->GetItem(_variant_t("FAN1"))->Value=var;
    var.iVal=p->Status.FanSpeed2;
    rs3->Fields->GetItem(_variant_t("FAN2"))->Value=var;
    var.iVal=p->Status.FanSpeed3;
    rs3->Fields->GetItem(_variant_t("FAN3"))->Value=var;
    rs3->Fields->GetItem(_variant_t("HP"))->Value=_variant_t(p->Param.HPressure);
    rs3->Fields->GetItem(_variant_t("LP"))->Value=_variant_t(p->Param.LPressure);
    rs3->Fields->GetItem(_variant_t("TH1"))->Value=_variant_t(p->Param.TAirOut);
    rs3->Fields->GetItem(_variant_t("TH2"))->Value=_variant_t(p->Param.TIn1);
    rs3->Fields->GetItem(_variant_t("TH3"))->Value=_variant_t(p->Param.TMid1);
    rs3->Fields->GetItem(_variant_t("TH4"))->Value=_variant_t(p->Param.TIn2);
    rs3->Fields->GetItem(_variant_t("TH5"))->Value=_variant_t(p->Param.TMid2);
    rs3->Fields->GetItem(_variant_t("TH6"))->Value=_variant_t(p->Param.TIn3);
    rs3->Fields->GetItem(_variant_t("TH7"))->Value=_variant_t(p->Param.TMid3);
    rs3->Fields->GetItem(_variant_t("TH8"))->Value=_variant_t(p->Param.TEnviroment);
    rs3->Fields->GetItem(_variant_t("TH9"))->Value=_variant_t(p->Param.TOut1);
    rs3->Fields->GetItem(_variant_t("TH10"))->Value=_variant_t(p->Param.TOut2);
    rs3->Fields->GetItem(_variant_t("TH11"))->Value=_variant_t(p->Param.TOut3);
    rs3->Fields->GetItem(_variant_t("TH12"))->Value=_variant_t(p->Param.TAirRecle);
    rs3->Update(); 

    }//try
    catch (_com_error e)
    {
    CString DataStr;
    DataStr.Format("%s+20",e.Description());
    AfxMessageBox(DataStr);
    }

    p=p->next;

    }
    rs3->Close();以上是部分插入数据的代码,打开之后应该都关闭了。
      

  4.   

    结束的地方调用
    VariantClear(&var);
    试试