你使用的是完全相同的SQL语句吗?还有,你的显示过程需要有可比性。

解决方案 »

  1.   

    我的VC程序代码结构都一样。
    先MoveFist(),再MoveNext()遍历整个表,不同是RecordSet。
    记录集打开的记录数都一样。我又什么办法可优化吗?
    难道遍历1500条记录(包括插入ListView中)非得5秒以上?
      

  2.   

    在VC下寫建議不要使用ADO,直接與用SQLOLEDB API,速度更多。ADO則因包裝了太多的東西,所以速度會較慢。
      

  3.   

    ADO代码如下:   _RecordsetPtr m_pRecordset;
       m_pRecordset.CreateInstance("ADODB.Recordset");
       m_pRecordset->Open("SELECT * FROM MyTable",
                         _variant_((IDispatch*)theApp->Connection,true),
                         adOpenStatic,adLockOptimistic,adCmdText);  _variant_t vCode,vName,....,vAmount;   if(!m_pRecordset->BOF )
    m_pRecordset->MoveFirst();   while(!m_pRecordset->adoEOF)
         {
    vCode   = m_pRecordset->GetCollect("代码");
    vName   = m_pRecordset->GetCollect("名称");
                                .
                                .
                                .
    vAmount = m_pRecordset->GetCollect("总额"); ctrlList.SetItemText(nItem,0,(_bstr_t)vCode);
    ctrlList.SetItemText(nItem,1,(_bstr_t)vName);
                                  .
                                  .
                                  .
    ctrlList.SetItemText(nItem,8,(_bstr_t)vAmount);

    nItem++;
    m_pRecordset->MoveNext();
         }
      

  4.   

    不要用静态的,用动态只进游标速度会快。
    动态游标执行完open后就有一条数据就位,静态的会把1500条提取到内存中才从open返回
      

  5.   

    呵呵,多谢neosu(neo)。
    我用了adOpenDynamic后,速度提高了一秒。但还是不够呀!还有哪位给点指导,谢先!
      

  6.   

    change your connection string to use "Provider=SQLOLEDB;......."use adForwardOnly, adReadOnly 
      

  7.   

    我对OLEDB不太熟。我是下面这样写的,连接不上。hr = m_pConnection.CreateInstance("ADODB.Connection");
    if(SUCCEEDED(hr))
        hr = m_pConnection->Open("Provider=SQLOLEDB;
                                  SERVER=FREESHOOT;
                                  DATABASE=实时数据库;UID=sa;PWD=;",
                                  "","",adModeUnknown);
      

  8.   

    try_bstr_t strCnn("Provider='sqloledb';Data Source='MySqlServer';"
            "Initial Catalog='pubs';Integrated Security='SSPI';");pConnection->Open(strCnn,"","",adConnectUnspecified);
      

  9.   

    各位大哥,我用了动态游标也用了OLEDB,但还是很慢,我只有不到两千条记录,
    却要花8秒多,是不是太夸张了?倒是我原先用ODBC(从ClassWizard派生CMarketSet)写,还只要4秒多一点。
    代码如下;         CMarketSet m_MarketSet;
    if(!m_MarketSet.IsOpen())
    {
     m_MarketSet.Open();
    }
                      ....
    if(!m_MarketSet.IsBOF())
    m_MarketSet.MoveFirst();
    while(!m_MarketSet.IsEOF())
    {
              ctrlList.SetItemText(nItem,0,m_MarketSet.m_column1);
    ctrlList.SetItemText(nItem,1,m_MarketSet.m_column2);
                                  .
                                  .
                                  .
    nItem++;
    m_MarketSet.MoveNext();
    }
    用以前在坛子里听某位前辈说(不记得啥名了),他用ADO遍历40万条记录也只要
    10几秒钟呀.
    还有什么优化的办法呢?
      

  10.   

    用m_MarketSet.getrows()先把记录取出来就快了